Indeks (berbasis nol) harus lebih besar dari atau sama dengan nol


117

Hai, saya terus mendapatkan kesalahan:

Indeks (berbasis nol) harus lebih besar dari atau sama dengan nol dan kurang dari ukuran daftar argumen.

Kode saya:

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
Anda mengubah urutan indeks argumen di pembaca dengan indeks parameter dalam pernyataan format. Ganti 2 dengan 0 di Aboutme.Text = .
tvanfosson

9
String.Format tidak menggunakan placeholder unik per kelas maupun per solusi. Ini adalah per string setiap kali String.Format dipanggil, jadi jangan meningkatkannya menjadi {2} berdasarkan {0} dan {1} telah digunakan!
RichardTheKiwi

1
alasan apa pun Anda menggunakan ODBC vs. konektor .NET?
Jon Black

2
Mengapa Anda menggunakan string.formar untuk baris ini :) Aboutme.Text = String.Format ("{2}", reader.GetString (0)); Anda bisa. Aboutme.Text = reader.GetString (0);
Ivo

Jawaban:


190

String.FormatPenggunaan kedua Anda {2}sebagai placeholder tetapi Anda hanya meneruskan satu argumen, jadi Anda harus menggunakan {0}sebagai gantinya.

Ubah ini:

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

Untuk ini:

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

23

Di baris ini:

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

Token {2} tidak valid karena Anda hanya memiliki satu item di parm. Gunakan ini sebagai gantinya:

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

8

Ubah baris ini:

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

4

Ini juga bisa terjadi saat mencoba melempar di ArgumentExceptionmana Anda secara tidak sengaja memanggil ArgumentExceptionoverload konstruktor

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

String.Format harus dimulai dengan indeks nol "{0}" seperti ini:

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();

        }
    }
}

Gambar


1
Di sini, saat saya menjalankan kueri ini. Di baris perintah tidak mencetak baris terakhir seperti "Hello Parag Patel" tetapi menunjukkan kesalahan "System.FormatException terjadi Pesan = Indeks (berbasis nol) harus lebih besar dari atau sama dengan nol dan kurang dari ukuran argumen daftar."
parag

Harus Console.WriteLine ("Halo {0}, {1}", NamaDepan, NamaBelakang);
Fenrir88

@ Fenrir88, tetap
jt000

0

Ubah baris ini:

Angka 2 harus 0. Setiap hitungan dimulai dari 0.

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

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

0

Dalam kasus saya, saya tidak bisa melihat kesalahan "+ nama" . Kompilator tidak akan melaporkan kesalahan dalam kasus ini. Jadi berhati-hatilah.

//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);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.