Indeks (liczony od zera) musi być większy lub równy zero


117

Hej, ciągle pojawia się błąd:

Indeks (liczony od zera) musi być większy lub równy zero i mniejszy niż rozmiar listy argumentów.

Mój kod:

OdbcCommand cmd = new OdbcCommand("SELECT FirstName, SecondName, Aboutme FROM User WHERE UserID=1", cn);

OdbcDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
    Name.Text = String.Format("{0} {1}", reader.GetString(0), reader.GetString(1));
    Aboutme.Text = String.Format("{2}", reader.GetString(0));
}

6
Przeniesiono indeks argumentu w czytniku na indeks parametru w instrukcji format. Przełącz 2 z 0 w swoim Aboutme.Text = .
tvanfosson

9
String.Format nie używa unikatowych symboli zastępczych dla klasy ani dla rozwiązania. Jest to na ciąg za każdym razem, gdy wywoływana jest String.Format, więc proszę nie zwiększać go do {2} na podstawie użycia {0} i {1}!
RichardTheKiwi

1
z jakiegoś powodu używasz ODBC zamiast .NET?
Jon Black

2
Dlaczego używasz string.formar w tym wierszu :) Aboutme.Text = String.Format ("{2}", reader.GetString (0)); mógłbyś. Aboutme.Text = reader.GetString (0);
Ivo,

Odpowiedzi:


190

Twoje drugie String.Formatużywa {2}jako symbolu zastępczego, ale przekazujesz tylko jeden argument, więc powinieneś użyć {0}zamiast tego.

Zmień to:

String.Format("{2}", reader.GetString(0));

Do tego:

String.Format("{0}", reader.GetString(2));

23

W tej linii:

Aboutme.Text = String.Format("{2}", reader.GetString(0));

Token {2} jest nieprawidłowy, ponieważ masz tylko jeden przedmiot w parmach. Użyj tego zamiast tego:

Aboutme.Text = String.Format("{0}", reader.GetString(0));

8

Zmień tę linię:

Aboutme.Text = String.Format("{0}", reader.GetString(0));

4

Może się to również zdarzyć, gdy próbujesz rzucić miejsce, w ArgumentExceptionktórym nieumyślnie wywołasz ArgumentExceptionprzeciążenie konstruktora

public static void Dostuff(Foo bar)
{

   // this works
   throw new ArgumentException(String.Format("Could not find {0}", bar.SomeStringProperty));

   //this gives the error
   throw new ArgumentException(String.Format("Could not find {0}"), bar.SomeStringProperty);

}

2

Ciąg.Format musi zaczynać się od zerowego indeksu „{0}” w następujący sposób:

Aboutme.Text = String.Format("{0}", reader.GetString(0));

1
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("Enter Your FirstName ");
            String FirstName = Console.ReadLine();

            Console.WriteLine("Enter Your LastName ");
            String LastName = Console.ReadLine();
            Console.ReadLine();

            Console.WriteLine("Hello {0}, {1} ", FirstName, LastName);
            Console.ReadLine();

        }
    }
}

Obrazek


1
Tutaj, kiedy uruchamiam to zapytanie. W wierszu poleceń nie wypisuje ostatniej linii, takiej jak "Witaj Parag Patel", ale pokazuje błąd "Wystąpił wyjątek System.FormatException Message = Indeks (liczony od zera) musi być większy lub równy zero i mniejszy niż rozmiar argumentu lista."
parag

Powinien to być Console.WriteLine ("Witaj {0}, {1}", FirstName, LastName);
Fenrir88

@ Fenrir88, naprawiono
jt000

0

Zmień tę linię:

2 powinno być 0. Każda liczba zaczyna się od 0.

//Aboutme.Text = String.Format("{2}", reader.GetString(0));//wrong

//Aboutme.Text = String.Format("{0}", reader.GetString(0));//correct

0

W moim przypadku nie widziałem błędu „+ imię” . W tym przypadku kompilator nie zgłosi błędu. Więc uważaj.

//Wrong Code:

string name="my name";
string age=25;
String.Format(@"Select * from table where name='{1}' and age={1}" +name, age);


//Right Code:

string name="my name";
string age=25;
String.Format(@"Select * from table where name='{1}' and age={1}" , name, age);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.