回答:
問題は、あなたがList<T>.Reverse()
を返すということですvoid
。
あなたはどちらかをすることができます:
List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();
または:
IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();
後者は、任意のものIEnumerable<T>
を元に戻すにはすべてのデータをバッファリングしてからすべてを生成する必要があるため、よりコストがかかりList<T>
ます。(ここでの違いEnumerable.Reverse<T>()
は、List<T>.Reverse()
インスタンスメソッドではなく、拡張メソッドを呼び出すことです。)
さらに効率的ですが、次のものを使用できます。
string[] namesArray = "Tom,Scott,Bob".Split(',');
List<string> namesList = new List<string>(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();
これにより、不適切なサイズのバッファーの作成が回避されます-実行する場所で4つのステートメントを実行することを犠牲にして...いつものように、実際の使用例では、読みやすさとパフォーマンスを比較検討してください。
この質問はかなり古いのですが、文字列にスペースが含まれていることを除いて、同様の問題がありました。文字列をコンマだけで区切る方法を知る必要がある場合:
string str = "Tom, Scott, Bob";
IList<string> names = str.Split(new string[] {","," "},
StringSplitOptions.RemoveEmptyEntries);
StringSplitOptionsは、スペース文字のみになるレコードを削除します...
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();
これは機能します。
あなたがしようとしている場合
以下はうまくいくはずです:
string str = "Tom Cruise, Scott, ,Bob | at";
IEnumerable<string> names = str
.Split(new char[]{',', '|'})
.Where(x=>x!=null && x.Trim().Length > 0)
.Select(x=>x.Trim());
出力
これで、他の人が示唆するように、順序を明らかに逆にすることができます。