webForumDet fria alternativet

Index was outside the bounds of the array .NET C#

.NET

5 svar · 347 visningar · startad av T_Codez

Medlem sedan juli 2001458 inlägg
Frågan#1

Hej hej

Jag höll tidigare på att greja med att splitta en sträng där punkt och komma förekom. Lite förhistoria till det hittar du här: http://www.webforum.nu/showthread.php?s=&threadid=110452&forumid=29

Och här kommer själva fortsättningen...

Efter den lösningshjälpen så fick jag felmeddelande:

Index was outside the bounds of the array

Jag har letat runt på nätet, men änuu inte hittat något om det som jag kan identifiera mig med. Det förekommer ofta i olika tappningar tyvärr. Är detta något som ni råkat ut för tidigare, så

tar jag tacksamt emot info om det isf.?

Tack för uppmärksamheten

Mvh
/T

Medlem sedan feb. 20002 300 inlägg
#2

Du försöker komma åt ett fält i arrayen som inte existerar. Du specificerar antingen ett för stort (större än antalet element i arrayen) eller för litet (minustal) index.

Medlem sedan nov. 20022 355 inlägg
#3

Visa kodenraden(erna) som skapar felmeddelandet!

Medlem sedan juli 2001458 inlägg
#4

Koden som det berör är:

// Läs ut data från arrayListen och presentera i GUI (listViewn)
					
char[] ch = new char[3];
ch[0] = '.';
ch[1] = ',';
ch[2] = ' ';
string[] str;
// kör en try / catch här kanske... om error then ta hela strängen
foreach(Person person in personList)
{
	str = person.Fornamn.Split(ch);
	ListViewItem lvi = new ListViewItem(str[0]); //Substring split fram till punkt och/eller komma.
	lvi.SubItems.Add(str[1]);		     //Substring split efter punkt och/eller komma.
	lvi.SubItems.Add(person.Efternamn);
	listView1.Items.Add(lvi);
}

(Som jag fick hjälp av dig/er med tidigare.) :h

Nu har jag provat lite try/catch på den här rackaren och kommit underfund om att det finns strängar som inte har någon separering med en punkt/komma eller blank. utan bara är en enkel sträng.

Och då har jag lite funderingar på om det finns något sätt att kringå detta på. Typ:

IF (det kajkar ur)
{
ta hela strängen.
}

Eller om man kan använda IndexOfAny metoden på någe vis...

Men hur det skulle se ur kodmässigt är jag lite osäker på. :l

Medlem sedan nov. 20022 355 inlägg
#5

Du kan ju kolla hur många index det fins i strängvektorn och utifrån det göra olika saker.

if (str.Length != 1)
	//gör det du gjort tidigare
else
    //gör något annat
Medlem sedan juli 2001458 inlägg
#6

Ja, det blev något liknande som du föreslog...

Jag lyckades knåpa ihop lite till slut iaf. Jag använde mig av "IndexOfAny" metoden
som var klockren i sin funktion. Så lösningen som fick det att funka för mig ser ut så här:

(variabeln svar deklarerad som string & pos deklarerad som integer i Form1)

char[] ch = new char[3];
ch[0] = '.';
ch[1] = ',';
ch[2] = ' ';

string[] str;

foreach(Person person in personList)
{
	svar = person.Fornamn;

	char[] testchar = {'.', ',', ' '};			//Se om hämtad sträng innehåller efterfrågade tecken
	pos = svar.IndexOfAny(testchar);			//tilldela värdet till variabeln pos som testchar levererar

	if (pos > -1)						/*Se om pos har större värde än -1 (-1 för att en array börjar på 0) om det är sant
								  Kör igenom strängen för splittning */
	{
		str = person.Fornamn.Split(ch);			//Splitta strängen om något av tecknen förekommer
		ListViewItem lvi = new ListViewItem(str[0]);  	//Substring splitta fram till punkt och/eller komma.
		lvi.SubItems.Add(str[1]);		      	//Substring split efter punkt och/eller komma.
		lvi.SubItems.Add(person.Efternamn);
		listView1.Items.Add(lvi);
	}
	else							//Om Pos värdet är -1, gör ingen splitt på strängen

	{
		ListViewItem lvi = new ListViewItem(person.Fornamn);
		lvi.SubItems.Add(person.Fornamn);
		lvi.SubItems.Add(person.Efternamn);
		listView1.Items.Add(lvi);
	}
}

Thankz! :birp

270 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
134 ms — ändringar (db)