web-dev-qa-db-ja.com

IListのトラブル。固定サイズ?

私はこのコードを持っています:

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

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

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

しかし、IListの.Split()の後のサイズは固定されているようです:System.NotSupportedException:コレクションは固定サイズでした。

この問題を解決するにはどうすればよいですか?

19
markzzz

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>インターフェイスに限らず、サポートされていないメソッドを使用せずに、クラスで実行できることを正確に使用できます。

21
Guffa

_string.Split_は文字列を返します配列。これは確かに固定サイズになります。

結果を_List<string>_コンストラクターに渡すことにより、それを_List<T>_に変換できます。

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

または、可能な場合は、LINQ ToList()演算子を使用できます。

_IList<string> stelle = stelleString.Split('-').ToList();
_
13
Oded

サイズが固定されているため、 string.Split はstring []を返します。要素の追加をサポートするには、splitの戻り値をList <string>インスタンスに渡す必要があります。

3
Jehof

結果に対してToList()を呼び出します。

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

String.splitは配列を返します。ただし、配列のサイズを変更することはできます。 VBです

ReDim perserve myarray(newlength minus one)
0
Iesvs