C# 这是最大的麻烦。固定尺寸?

C# 这是最大的麻烦。固定尺寸?,c#,collections,ilist,C#,Collections,Ilist,我有以下代码: IList<string> stelle = stelleString.Split('-'); if (stelle.Contains("3")) stelle.Add("8"); if (stelle.Contains("4")) stelle.Add("6"); IList stelle=stelleString.Split('-'); 如果(钢柱包含(“3”)) 添加(“8”); 如果(钢柱包含(“4”)) 添加(“6”); 但是在.Sp

我有以下代码:

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

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

if (stelle.Contains("4"))
    stelle.Add("6");
IList stelle=stelleString.Split('-');
如果(钢柱包含(“3”))
添加(“8”);
如果(钢柱包含(“4”))
添加(“6”);
但是在.Split():System.NotSupportedException:集合具有固定大小之后,IList似乎具有固定大小


如何解决此问题?

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

通过将结果传递给
列表
构造函数,可以将其转换为
列表

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

Split
方法返回一个数组,不能调整数组的大小

您可以使用
ToList
扩展方法从数组中创建
列表

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

List stelle=stelleString.Split('-').ToList();
这将允许您准确地使用类可以执行的操作,不限于
IList
接口,也不支持任何不受支持的方法。

调用
ToList()
,以获得以下结果:

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

它具有固定大小,因为返回字符串[]。您需要将split的返回值传递给列表实例以支持添加其他元素。

String.split返回数组。但您可以重新确定数组的大小。在VB中是

ReDim perserve myarray(newlength minus one)

string.Split()
返回字符串数组。数组的大小是固定的,因此会出现异常。这是由于.NET中错误的设计决策造成的:如果stelleString为“”,则可能会出现问题。我应该把它放在一个try catch上……@markzzz:如果字符串不包含分隔符,
Split
方法返回一个包含原始字符串的单个项的数组。如果您想以不同的方式处理此问题,那么一个
try…catch
将没有帮助,您必须检查列表的
Count
。听起来像System.Array在语法上实现了IList,但在语义上却没有。不幸。
List<string> stelle = stelleString.Split('-').ToList();
IList<string> stelle = stelleString.Split('-').ToList();
ReDim perserve myarray(newlength minus one)