IList麻烦.固定尺寸?

mar*_*zzz 18 c# collections ilist

我有这个代码:

IList<string> stelle = stelleString.Split('-');

if (stelle.Contains("3"))
    stelle.Add("8");

if (stelle.Contains("4"))
    stelle.Add("6");
Run Code Online (Sandbox Code Playgroud)

但似乎IList在.Split()之后有一个固定的大小:System.NotSupportedException:Collection是固定大小的.

我该如何解决这个问题?

Guf*_*ffa 22

Split方法返回一个数组,您无法调整数组的大小.

您可以List<string>使用ToList扩展方法从数组创建一个:

IList<string> stelle = stelleString.Split('-').ToList();
Run Code Online (Sandbox Code Playgroud)

List<T>构造函数:

IList<string> stelle = new List<string>(stelleString.Split('-'));
Run Code Online (Sandbox Code Playgroud)

此外,您可能不希望将IList<T>接口用作变量的类型,而只是使用对象的实际类型:

string[] stelle = stelleString.Split('-');
Run Code Online (Sandbox Code Playgroud)

要么:

List<string> stelle = stelleString.Split('-').ToList();
Run Code Online (Sandbox Code Playgroud)

这将使您可以使用该类可以执行的操作,不仅限于IList<T>接口,也不支持不支持的方法.


Ode*_*ded 13

string.Split返回一个字符串数组.这确实有一个固定的大小.

您可以List<string>通过将结果传递给List<T>构造函数将其转换为a :

IList<string> stelle = new List<string>(stelleString.Split('-'));
Run Code Online (Sandbox Code Playgroud)

或者,如果可用,您可以使用LINQ ToList()运算符:

IList<string> stelle = stelleString.Split('-').ToList();
Run Code Online (Sandbox Code Playgroud)

  • 听起来像 System.Array 在语法上而不是语义上实现了 IList&lt;T&gt; 。不幸的。 (2认同)