2011-11-08 12 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<T>インタフェースを使用したくない、ほか

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

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

またはList<T>コンストラクタを変数のタイプとして、オブジェクトの実際のタイプを使用してください:

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

か:

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

これはIList<T>インターフェイスに限定されるものではなく、あなたはクラスが行うことができます正確に何を使用させないと、サポートされていないメソッドします。結果に

+0

これはstelleStringが ""の場合に問題になる可能性があります。 – markzzz

+1

@markzzz:文字列に区切り文字が含まれていない場合、Splitメソッドは元の文字列を含む単一の項目を持つ配列を返します。それを別の方法で処理したい場合は、 'try ...キャッチ 'は助けにならない、あなたはリストの'カウント 'をチェックする必要があります。 – 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 を構文上は実装していますが、意味的には実装していません。残念です。 –

2

コールToList()

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

それは、文字列[]を返しますstring.Split固定サイズの原因があります。追加の要素の追加をサポートするには、リスト<の文字列>にsplitの戻り値を渡す必要があります。

0

String.splitは配列を返します。しかし、配列の次元を変更できます。 VBでは

ReDim perserve myarray(newlength minus one) 
関連する問題