1

これは私がずっと疑問に思っていたことで、何度か調べてみましたが、まったくわかりませんでした。

だから基本的に私がやりたいことは、この効果に何かを得ることです:

List<string> strings = new List<string>(){"a","b","c"};
string aString = foreach(string s in strings){ if (s == "c") return s;}

その後、aString の値は "c" になります。

ラムダ式を使用してみましたが、正しく機能しないか、これを行う方法がないだけかもしれません。

そして明らかに、上記の例よりも少し複雑なことをしたいのですが、同じように機能します。

可能?ありえない?

4

3 に答える 3

5

FirstOrDefaultExtension メソッドを使用する必要があります。

List<string> strings = new List<string>(){"a","b","c"};
return strings.FirstOrDefault(s=>String.Equals(s, "a"));
于 2012-07-18T22:16:59.417 に答える
3

この特定の例では、必要な文字列が既にわかっているため、意味がありませんが、いずれにせよ、これがあなたがやろうとしていることだと思います...

List<string> strings = new List<string>(){"a","b","c"};

string aString = strings.Find((string s) => s == "a");
于 2012-07-18T22:20:18.330 に答える
3

LINQ を (オブジェクトに対して) 使用できます。

List<string> strings = new List<string>(){"a","b","c"};
string aString = strings.Where(x => x.Equals("a")).FirstOrDefault();

メソッドはWhere()列挙可能なものを繰り返し処理し、ラムダを満たす各要素を「返します」。そのような最初の要素を取得するには、メソッドを連鎖させることができます(基準を満たす要素がない場合FirstOrDefault()に返されます)。default(string)

@MichaelGraczyk が指摘しているようにFirstOrDefault()、述語を受け入れるオーバーロードがあるため、実際には呼び出しを only に減らすことができます。

string aString = strings.FirstOrDefault(x => x.Equals("a"));

他にも便利な方法が多数あります。詳細については、こちらを参照してください

于 2012-07-18T22:15:48.783 に答える