2011-09-01 23 views
4

私はパラメータとしてIList<string> someVariableをとる関数を持っています。私はアルファベット順に値をソートできるようにこれをリストに変換したい。リストに<string>を変換する<string>()

どうすればよいですか?

+1

実際にリストをソートするか、特定の順序で繰り返し処理する必要がありますか? – R0MANARMY

答えて

8

あなただけ

var list = new List<string>(myIList); 
list.Sort(); 

または

var list = myIList as List<string>; 
if (list != null) list.Sort; // ... 
+0

与えられた 'IList 'が特に 'List 'ではないからといって、ソートできないわけではありません。 ['ReadOnlyCollection'](http://msdn.microsoft.com/en-us/library/ms132474.aspx)は' IList 'を実装していますが、' List 'ではありません。あなたはそれをコピーしてソートすることはできます。投稿した2番目の例は間違っています。 – R0MANARMY

+0

多分私はこれで100%はっきりしていなかったかもしれません - それは間違いではありません。この種の状況では動作していません(ソートは呼び出されません)。しかし、ヒントのためにあなたに感謝します。 ) – Carsten

+0

*このような状況で*どのように動作していない*は間違っていませんか? 'IList 'が** IList 'がどのように実装されているのかという理由は、警告なしで変更することができる重要ではない実装の詳細です。 2番目の例は、黙って失敗するでしょう。明示的な依存関係を強制しないようにしたいと思います。 – R0MANARMY

5

のIListはIEnumerableを実装して行うことができます。 .ToList()メソッドを使用します。

var newList = myIList.ToList(); 
newList.Sort(); 
+1

'.ToList'の前に' .Cast <> 'を呼び出す必要があると思います –

7
IList<string> someVariable = GetIList(); 
List<string> list = someVariable.OrderBy(x => x).ToList(); 
2

あなたはそうのようなIList<string>をソートするためにLINQを使用することができます。

IList<string> foo = .... ; // something 
var result = foo.OrderBy(x => x); 
1

あなたは物事をソートするリストに変換する必要はありません。あなたのソート方法はリストを必要としますがIListを受け入れませんか?私はこれが実際の問題だと思うでしょう。

さらにリストが本当に必要な場合は、IListの本物がリスト(多少はありそうですが)であれば、それをそのまま解釈することができます。新しいリストを作成する前に既にリストであるかどうかを最初に確認する

var concreteList = parameter as List<T> ?? parameter.ToList(); 
関連する問題