99

これの正しい構文は次のとおりです。

IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();

私は何を台無しにしていますか?TSource とはどういう意味ですか?

4

6 に答える 6

261

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 つのステートメントを使用する必要があります。

于 2008-11-24T20:35:32.510 に答える
12

この質問はかなり古いものだと思いますが、文字列にスペースが含まれていることを除いて、同様の問題がありました。カンマだけでなく文字列を区切る方法を知る必要がある人のために:

string str = "Tom, Scott, Bob";
  IList<string> names = str.Split(new string[] {","," "},
  StringSplitOptions.RemoveEmptyEntries);

StringSplitOptionsは、スペース文字のみになるレコードを削除します。

于 2012-07-05T07:31:27.693 に答える
5
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();

これは機能します。

于 2008-11-24T20:37:04.330 に答える
2

これを試して:

List<string> names = new List<string>("Tom,Scott,Bob".Split(','));
names.Reverse();
于 2008-11-24T20:33:48.567 に答える
1

あなたがしようとしている場合

  1. 複数の区切り記号を使用する
  2. 空の文字列をフィルタリングする
  3. 先頭/末尾のスペースをトリム

以下が機能するはずです:

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());

出力

  • トム
  • クルーズ
  • スコット
  • ボブ

他の人が提案したように、明らかに順序を逆にすることができます。

于 2017-08-21T14:06:16.613 に答える
1

ここで欠けているのは、 .Reverse() が void メソッドであることです。.Reverse() の結果を変数に割り当てることはできません。ただし、順序を変更して Enumerable.Reverse() を使用し、結果を取得することはできます

var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()

違いは、 Enumerable.Reverse() が void return ではなく IEnumerable<T> を返すことです。

于 2008-11-24T20:37:33.237 に答える