2011-11-08 70 views
13

我有這樣的代碼:IList的麻煩。固定大小?

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

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

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

但目前看來,IList中有一個固定大小.Split()後:System.NotSupportedException:收藏是一個固定大小的。

我該如何解決這個問題?

+1

'string.Split()'返回一個字符串數組。數組的大小是固定的,因此例外。 – BoltClock

+0

這是由於.NET中糟糕的設計決定引起的:http://stackoverflow.com/questions/5968708/why-array-implements-ilist/5968798#5968798 – mbeckish

回答

15

Split方法返回一個數組,並且不能調整數組的大小。

可以使用ToList擴展方法創建一個從數組List<string>

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

List<T>構造:

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

此外,你可能不希望使用IList<T>接口作爲變量的類型,但僅使用對象的實際類型:

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

或:

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

這將讓你使用什麼類可以做的,不限於IList<T>接口,並沒有不支持的方法。

+0

這可能是一個問題,如果stelleString是「」。我應該把它放在try catch上.... – markzzz

+1

@markzzz:如果字符串不包含分隔符,那麼'Split'方法返回一個包含原始字符串的單個項目的數組。如果你想以不同的方式處理,試試......抓住'不會幫助,你必須檢查列表中的「計數」。 – Guffa

13

string.Split返回字符串數組。這的確會有一個固定的大小。

您可以通過結果傳遞給List<T>構造函數將其轉換爲List<string>

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

或者,如果有的話,你可以使用LINQ ToList()操作:

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

聽起來像System.Array在語法上實現IList 但語義上不是。不幸的。 – 2012-08-08 20:28:25

2

呼叫ToList()到結果:

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

它有一個固定的大小的原因string.Split返回字符串[]。您需要將split的返回值傳遞給List <字符串>實例以支持添加其他元素。

0

String.split返回一個數組。但是你可以重新調整數組。在VB中它是

ReDim perserve myarray(newlength minus one)