Toon posts:

[C#] System.IndexOutOfRangeException Error

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dit is het probleem:
als ik mijn applicatie nu opstart kijk ik dit:
An unhandled exception of type 'System.IndexOutOfRangeException' occurred in Control Me PC.exe

Additional information: Index was outside the bounds of the array.
Dit is mijn code:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
        private void iniappsload()
        {
            appoff.Rows.Clear();
            appon.Rows.Clear();

            string all = appnaam1 + "|||" + apppatch1 + "||||" + appnaam2 + "|||" + apppatch2 + "||||" + appnaam3 + "|||" + apppatch3 + "||||" + appnaam4 + "|||" + apppatch4 + "||||" + appnaam5 + "|||" + apppatch5 + "||||" + appnaam6 + "|||" + apppatch6 + "||||" + appnaam7 + "|||" + apppatch7 + "||||" + appnaam8 + "|||" + apppatch8 + "||||" + appnaam9 + "|||" + apppatch9 + "||||"+ appnaam10 + "|||" + apppatch10;
            string[] all2 = all.Split("||||".ToCharArray());

            foreach (string iniline in all2)
            {
                string[] line = iniline.Split("|||".ToCharArray());

                string naam = line[0];
                string path = line[1];
                string[] path2 = path.Split("/".ToCharArray());
                int i;
                for (i = 0; i <= path2.Length - 1; i++) ;
                string filenaam = path2[i];

                string allnew = naam + "||||" + path + "||||" + filenaam;

                string[] total = allnew.Split("||||".ToCharArray());

                ObjectQuery oQuery = new ObjectQuery("select Name from Win32_Process WHERE name = '" + filenaam + "'");
                ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery);
                ManagementObjectCollection oReturnCollection = oSearcher.Get();
                int amount = int.Parse(oReturnCollection.Count.ToString());
                if (path == "")
                {
                
                }
                else if (amount == 1)
                {
                    appon.Rows.Add(total);
                }
                else
                {
                    appoff.Rows.Add(total);
                }
            }
            
        [b]}[/b]


Het Vet gedreukte geeft hij geel aan.


Ik denk zelf dat het lag aan path2.Count(); dat had ik toen vervangen door:
C#:
1
2
                int i;
                for (i = 0; i <= path2.Length - 1; i++) 

Maar dat werkte ook niet.

dus mijn vraag is... Waar kan het aan liggen?

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Wat is de inner exception?

Zowiezo: wat doet die ; aan het einde van regel 17?

[ Voor 51% gewijzigd door Snake op 22-02-2009 16:37 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

Verwijderd

Dit is gewoon een standaard error die gegeven wordt door je IDE en lijkt mij simpel op te lossen door gewoon te debuggen met BreakPoints en je InnerException eens goed te bekijken. Een een IndexOutOfRange error zal hier (denk ik) te maken hebben met de index die je van je array opvraagt op regel: 13 en 14 of met een index die jij probeert op te vragen / probeert te berekenen terwijl deze niet bestaat (path2.Length) vraag hier voor regel 17 eens de length van op voordat je er -1 van wilt aftrekken.

[ Voor 24% gewijzigd door Verwijderd op 22-02-2009 16:43 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wat bedoel je met inner?

en die ; aan het einde van regel 17 staat daar omdat hij anders een foutmelding geeft bij de string die daaronder staat.

Acties:
  • 0 Henk 'm!

Verwijderd

probeer dan met een try/catch statement je inner exception te bekijken

C#:
1
2
3
4
5
6
7
8
try
{
   //zet hier je code
}
catch(Exception ex)
{
 console.writeline(ex.innerexception);
}

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
als ik dat probeer krijg ik dit:
error CS1061: 'System.Exception' does not contain a definition for 'innerexception' and no extension method 'innerexception' accepting a first argument of type 'System.Exception' could be found (are you missing a using directive or an assembly reference?)

Acties:
  • 0 Henk 'm!

Verwijderd

Waar het nou op lijkt is dat je mijn zin heb gecopy/pasted en zal hem daarom niet herkennen omdat C# case sensitive is (hoofdletter gevoelig) het is dus InnerException en geen innerexception ;)

Kijk deze link voor Try/Catch statemens met een InnerException

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke.. ik kon hem gewoon complimeren zonder fouten... maar als ik hem opstart krijg ik nu:
An unhandled exception of type 'System.NullReferenceException' occurred in Control Me PC.exe

Additional information: Object reference not set to an instance of an object.

Acties:
  • 0 Henk 'm!

Verwijderd

Ik wil niet mierenn**ken maar je gaat toch nou niet elke exception die je met debuggen tegekomt hier plaatsen. Als je kijkt naar de gegeven error zou je zelf al kunnen vast stellen wat het probleem is.

Object reference not set a an instance of a object, je zal dus waarschijnlijk ergens een class megeven (als parameter of wat dan ook) terwijl je een instance (object) van deze class moet doorgeven.

EDIT:
NullReferenceExcpetion > Object reference not set a an instance of a object zal in dit geval dus een object betreffen wat Null is 8)7

Nou is het aan de Dev'er de kunst dit uit te zoeken hier leer je namelijk het meeste van ;)

link1
link2
link3

[ Voor 11% gewijzigd door Verwijderd op 22-02-2009 17:45 ]


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 21:05

Haan

dotnetter

dus mijn vraag is... Waar kan het aan liggen?
Debug je programma en zie op welke regel de fout optreedt, 10 tegen 1 dat je dan al snel ziet wat er mis is

@vdvos: 'Object not set to an instance of an object' betekent gewoon dat je iets probeert te doen met een object dat null is, zoals ook erg duidelijk is aan de naam: NullReferenceException ;)

[ Voor 38% gewijzigd door Haan op 22-02-2009 17:26 ]

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

Verwijderd

@Haan: En ik maar zeggen dat je uit de gegeven error kan vaststellen wat het probleem is haha. Ik EDIT hem eventjes O-)

Acties:
  • 0 Henk 'm!

  • codeneos
  • Registratie: Augustus 2004
  • Laatst online: 11-09 00:04

codeneos

[...]

Ten eerste snap ik het hele doel van je for loop niet, is de ; aan het einde van die regel wel correct. En als die correct is waarom schrijf je dan niet string filenaam = path2[path2.Length - 1]; . Je wilt toch gewoon het laatste element uit de array hebben, in dit geval een applicatie naam zonder de directory. In det geval kan je ook gebruikmaken van SubString() en LastIndexOf() methods in de string class.

En dan de regel int amount = int.Parse(oReturnCollection.Count.ToString());. De property count (als hij inherit van ICollection interface) is een INT dus waarom maak je er eerst een string van en dan weer een int :S.

Als dit mijn computer moest besturen (Control Me PC.exe) dan zou ik echt bang worden :D.

[ Voor 7% gewijzigd door codeneos op 22-02-2009 18:04 . Reden: Typos! ]

http://www.tweakers.net/gallery/119170/sys


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 21:05

Haan

dotnetter

codeneos schreef op zondag 22 februari 2009 @ 17:57:
Ten eerste snap ik het hele doel van je for loop niet, is de ; aan het einde van die regel wel correct. En als die correct is waarom schrijf je dan niet string filenaam = path2[path2.Length - 1]; . Je wilt toch gewoon het laatste element uit de array hebben, in dit geval een applicatie naam zonder de directory.

En dan de regel int amount = int.Parse(oReturnCollection.Count.ToString());. De property count (als hij inherit van ICollection interface) is een INT dus waarom maak je er eerst een string van en dan weer een int :S.

Als dit mijn computer moest besturen (Control Me PC.exe) dan zou ik echt bang worden :D.
Er is in dit programma op iedere regel wel iets aan te merken dat beter kan ;)

Bijvoorbeeld hier:
C#:
1
string all = appnaam1 + "|||" + apppatch1 + "||||" + appnaam2 + "|||" + apppatch2 + "||||" + appnaam3 + "|||" + apppatch3 + "||||" + appnaam4 + "|||" + apppatch4 + "||||" + appnaam5 + "|||" + apppatch5 + "||||" + appnaam6 + "|||" + apppatch6 + "||||" + appnaam7 + "|||" + apppatch7 + "||||" + appnaam8 + "|||" + apppatch8 + "||||" + appnaam9 + "|||" + apppatch9 + "||||"+ appnaam10 + "|||" + apppatch10;

zou bijvoorbeeld een Dictionary<string,string> een stuk handiger zijn, in plaats van eerst key/value pairs in een lange string te plakken met koppelteken, vervolgens de string te splitten op dat koppelteken en vervolgens de key/value pairs op te halen uit een array 8)7 dat is volgens mij ongeveer wat er gebeurt

[ Voor 30% gewijzigd door Haan op 22-02-2009 18:03 ]

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • codeneos
  • Registratie: Augustus 2004
  • Laatst online: 11-09 00:04

codeneos

[...]

Ben het met je eens. Voor het gemak ging ik er van uit de all string een soort van debug regel was en dat de echte data voor het programma van een file of user input komt.

In ieder geval zou ik de topic starter willen aan raden nog wat basis c# door te gaan nemen. Eventueel misschien opzoeken hoe de standaard generic collection werken.

De oplossing voor het probleem van de topic starter is trouwens, de eerste oplossing is misschien handig voor de topic starten en de tweede is effectiever.
C#:
1
2
3
int i;
for (i = 0; i < path2.Length - 1; i++) ;
string filenaam = path2[i]; 

Of
C#:
1
string filenaam = path2[path2.Length - 1]; 

[ Voor 33% gewijzigd door codeneos op 22-02-2009 18:15 ]

http://www.tweakers.net/gallery/119170/sys


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt Allemaal,

Het is mij nu gelukt om het te laten werken... hier kan een slotje op :)
Pagina: 1