सूचकांक (शून्य आधारित) शून्य से अधिक या उसके बराबर होना चाहिए


117

अरे मुझे एक त्रुटि मिलती रहती है:

सूचकांक (शून्य आधारित) तर्क सूची के आकार से अधिक या शून्य से अधिक या उससे कम होना चाहिए।

मेरा कोड:

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
आपने प्रारूप विवरण में पैरामीटर के सूचकांक के साथ रीडर में तर्क के सूचकांक को ट्रांसपोंड किया। अपने में 0 के साथ 2 स्विच करें Aboutme.Text =
tvanfosson

9
String.Format प्रति-वर्ग न तो अद्वितीय प्लेसहोल्डर्स का उपयोग करता है और न ही प्रति-समाधान। यह स्ट्रिंग के अनुसार हर बार होता है। String.Format को कहा जाता है, इसलिए कृपया इसे {0} और {1} पर आधारित {2} तक बढ़ाकर उपयोग में न लाएं!
रिचर्ड दिविवि

1
किसी भी कारण से आप ODBC बनाम .NET कनेक्टर का उपयोग कर रहे हैं?
जॉन ब्लैक

2
आप इस पंक्ति के लिए string.formar का उपयोग क्यों करते हैं :) Aboutme.Text = String.Format ("{2}", Reader.GetString (0)); आप ऐसा कर सकते हैं। Aboutme.Text = Reader.GetString (0);
Ivo

जवाबों:


190

आपका दूसरा एक प्लेसहोल्डर के रूप में String.Formatउपयोग करता है, {2}लेकिन आप केवल एक तर्क में गुजर रहे हैं, इसलिए आपको {0}इसके बजाय उपयोग करना चाहिए ।

इसे बदलो:

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

इसके लिए:

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

23

इस पंक्ति में:

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

टोकन {2} अमान्य है क्योंकि आपके पास केवल एक आइटम है। इसके बजाय इसका उपयोग करें:

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


4

यह तब भी हो सकता है जब ArgumentExceptionआप अनजाने में ArgumentExceptionकंस्ट्रक्टर को अधिभार को कॉल करने की कोशिश कर रहे हैं

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 को शून्य सूचकांक "{0}" से शुरू करना चाहिए:

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

        }
    }
}

चित्र


1
यहाँ, जब मैं इस क्वेरी को चलाता हूँ। कमांड लाइन में यह "हैलो पराग पटेल" जैसी अंतिम पंक्ति को प्रिंट नहीं करता है, लेकिन यह त्रुटि दिखा रहा है "System.FormatException हुआ संदेश = इंडेक्स (शून्य आधारित) शून्य से अधिक या उसके बराबर होना चाहिए और तर्क के आकार से कम होना चाहिए सूची।"
पराग सेप

यह Console.WriteLine ("Hello {0}, {1}", FirstName, LastName) होना चाहिए;
फेनरीर88

@ फेनरीरु, नियत
jt000

0

इस पंक्ति को बदलें:

2 को 0. होना चाहिए। प्रत्येक गिनती 0 से शुरू होती है।

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

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

0

मेरे मामले में मैं "+ नाम" की गलती नहीं देख सकता था । कंपाइलर इस मामले में त्रुटि की रिपोर्ट नहीं करेगा। तो ध्यान रखना।

//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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.