【问题标题】:IList trouble. Fixed size?IList 麻烦。固定大小?
【发布时间】:2011-11-08 14:48:39
【问题描述】:

我有这个代码:

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

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

if (stelle.Contains("4"))
    stelle.Add("6");

但似乎 IList 在 .Split() 之后具有固定大小:System.NotSupportedException: Collection was of a fixed size.

我该如何解决这个问题?

【问题讨论】:

标签: c# collections ilist


【解决方案1】:

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

您可以使用ToList 扩展方法从数组中创建List&lt;string&gt;

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

List&lt;T&gt; 构造函数:

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

此外,您可能不想使用IList&lt;T&gt; 接口作为变量的类型,而只是使用对象的实际类型:

string[] stelle = stelleString.Split('-');

或:

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

这将让您完全使用该类可以做什么,不限于IList&lt;T&gt; 接口,也没有不支持的方法。

【讨论】:

  • 如果 stelleString 是“”,这可能是个问题。我应该尝试一下……
  • @markzzz:如果字符串不包含分隔符,Split 方法将返回一个包含单个项目的数组,其中包含原始字符串。如果您想以不同方式处理,try...catch 将无济于事,您必须检查列表中的Count
【解决方案2】:

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

您可以通过将结果传递给List&lt;T&gt; 构造函数将其转换为List&lt;string&gt;

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

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

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

【讨论】:

  • 听起来 System.Array 在语法上但不是在语义上实现了 IList。不幸。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    调用ToList() 获取结果:

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

    【讨论】:

      【解决方案5】:

      String.split 返回一个数组。但是你可以重新调整数组。在VB中是

      ReDim perserve myarray(newlength minus one)
      

      【讨论】:

        猜你喜欢
        • 2013-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-26
        • 2015-10-07
        • 1970-01-01
        • 2012-05-27
        相关资源
        最近更新 更多