簡體   English   中英

List的索引與Array的索引之間的區別

[英]Difference between index of List and index of Array

在我的應用程序中構造連接字符串時,我遇到了一些相當異常的異常。

string basis = "Data Source={0};Initial Catalog={1};Persist Security Info={2};User ID={3};Password={4}";
List<string> info1 = new List<string>(){ "SQLSRV", "TEST", "True", "user1", "pass1" };
string[] info2 = new string[] { "SQLSRV", "TEST", "True", "user1", "pass1" };
// throws exception
Console.WriteLine(String.Format(basis, info1));
// works fine
Console.WriteLine(String.Format(basis, info2));

錯誤:

mscorlib.dll中發生了未處理的“System.FormatException”類型異常

附加信息:索引(從零開始)必須大於或等於零且小於參數列表的大小。

我的問題是:List的索引有什么問題?

這與索引無關。 在第一種情況下,您使用String.Format重載:

public static void Format(string format, object arg);

在第二個你使用這個:

public static void Format(string format, params object[] args);

所以在第一種情況下你只傳遞一個參數。 這會導致異常,因為您的格式字符串需要多個參數。

在第二種情況下,您提供所有參數,因為傳遞的是數組而不是一個List對象。

它將列表視為單個參數。 該數組被視為params object[] ...參數,給出了多個參數值。

問題出在String.Format方法的聲明中:第一個采用String Format(String format, object arg0) ,而第二個采用string Format(String format, params object[] args)

這使得第一個失敗,因為它期望索引比你提供的索引更多。

方法string.Format()接受一個object[]作為參數來替換格式字符串的占位符。

List不是數組,因此它被視為單個對象。 因此,因為您提供的參數少於格式字符串中的占位符,因此會導致異常。

正如您從MSDN中看到的那樣

https://msdn.microsoft.com/en-us/library/b1csw23d(v=vs.110).aspx

public static string格式(字符串格式,params object [] args)

String.Format想要arrayparams object[] args作為第二個參數,當你提供List<String>整個列表被視為對象數組的第一項 ,因此Format失敗(你必須提供) 五個項目)。 最簡單的補救措施是,恕我直言,通過Linq獲得一個陣列:

Console.WriteLine(String.Format(basis, info1.ToArray()));    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM