これの正しい構文は次のとおりです。
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
私は何を台無しにしていますか?TSource とはどういう意味ですか?
List<T>.Reverse()
問題は、 which を返すことを呼び出していることです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();
これにより、不適切なサイズのバッファが作成されるのを回避できます。その代償として、1 つのステートメントで 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();
これは機能します。
これを試して:
List<string> names = new List<string>("Tom,Scott,Bob".Split(','));
names.Reverse();
あなたがしようとしている場合
以下が機能するはずです:
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());
出力
他の人が提案したように、明らかに順序を逆にすることができます。
ここで欠けているのは、 .Reverse() が void メソッドであることです。.Reverse() の結果を変数に割り当てることはできません。ただし、順序を変更して Enumerable.Reverse() を使用し、結果を取得することはできます
var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()
違いは、 Enumerable.Reverse() が void return ではなく IEnumerable<T> を返すことです。