Dizin (sıfır tabanlı) sıfırdan büyük veya sıfıra eşit olmalıdır


117

Hey bir hata alıyorum:

Dizin (sıfır temelli) sıfırdan büyük veya sıfıra eşit ve bağımsız değişken listesinin boyutundan küçük olmalıdır.

Kodum:

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
Okuyucudaki bağımsız değişkenin dizinini, biçim deyimindeki parametrenin diziniyle değiştirdiniz. Sizin Aboutme.Text = .
tvanfosson

9
String.Format, sınıf başına veya çözüm başına benzersiz yer tutucular kullanmaz. String.Format her çağrıldığında dize başınadır, bu yüzden lütfen {0} ve {1} kullanımına bağlı olarak bunu {2} değerine yükseltmeyin!
RichardTheKiwi

1
ODBC ve .NET konektörünü kullanmanızın herhangi bir nedeni var mı?
Jon Black

2
Neden bu satır için string.formar kullanıyorsunuz :) Aboutme.Text = String.Format ("{2}", reader.GetString (0)); yapabilirdiniz. Aboutme.Text = reader.GetString (0);
Ivo

Yanıtlar:


190

Sizin ikinci String.Formatkullanımlar {2}yer tutucu olarak ancak kullanmalısınız böylece sadece bir argüman geçiyoruz {0}yerine.

Bunu değiştir:

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

Buna:

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

23

Bu satırda:

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

Parametrelerde yalnızca bir öğeniz olduğundan {2} simgesi geçersiz. Bunun yerine şunu kullanın:

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

8

Bu satırı değiştirin:

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

4

Bu, ArgumentExceptionyanlışlıkla ArgumentExceptionyapıcı aşırı yüklemesini çağırdığınız bir yere atmaya çalışırken de olabilir.

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 şu şekilde "{0}" sıfır dizini ile başlamalıdır:

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

        }
    }
}

Resim


1
İşte, bu sorguyu çalıştırdığımda. Komut Satırında "Merhaba Parag Patel" gibi son satırı yazdırmıyor ancak "System.FormatException oluştu" hatası gösteriyor Message = Index (sıfır tabanlı) sıfırdan büyük veya eşit ve bağımsız değişkenin boyutundan küçük olmalıdır liste."
parag

Console.WriteLine ("Hello {0}, {1}", FirstName, LastName) olmalıdır;
Fenrir88

@ Fenrir88, sabit
jt000

0

Bu satırı değiştirin:

2 0 olmalıdır. Her sayım 0'dan başlar.

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

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

0

Benim durumumda "+ isim" hatasını göremedim . Derleyici bu durumda bir hata bildirmez. Öyleyse kendine iyi bak.

//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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.