List的索引与Array的索引之间的区别

Mr *_*ace 4 c# arrays string list

在我的应用程序中构造连接字符串时,我遇到了一些相当异常的异常.

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));
Run Code Online (Sandbox Code Playgroud)

错误:

mscorlib.dll中发生了未处理的"System.FormatException"类型异常

附加信息:索引(从零开始)必须大于或等于零且小于参数列表的大小.

我的问题是:List的索引有什么问题?

Ren*_*ogt 8

这与索引无关.在第一种情况下,您使用以下重载String.Format:

public static void Format(string format, object arg);
Run Code Online (Sandbox Code Playgroud)

在第二个你使用这个:

public static void Format(string format, params object[] args);
Run Code Online (Sandbox Code Playgroud)

所以在第一种情况下你只传递一个参数.这会导致异常,因为您的格式字符串需要多个参数.

在第二种情况下,您提供所有参数,因为传递的是数组而不是一个List对象.