1

这是我一直想知道的事情,并且查了几次,但一直没有弄清楚。

所以基本上我想做的就是得到这样的效果:

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

所以在那之后,aString 的值为“c”。

我尝试过使用 lambda 表达式,也许我只是无法让它们正常工作,或者也许没有办法做到这一点。

显然我想做一些比我上面的例子更复杂的事情,但它会以同样的方式工作。

可能的?不可能?

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

您可以使用 LINQ(对象):

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

这些Where()方法遍历可枚举,并“返回”每个满足 lambda 的元素。要获取第一个这样的元素,您可以链接方法(如果没有元素符合条件FirstOrDefault(),它将返回。)default(string)

正如@MichaelGraczyk 指出的那样,您实际上可以将调用减少到 only FirstOrDefault(),因为它有一个接受谓词的重载:

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

还有许多其他有用的方法可用,您可以在此处阅读

于 2012-07-18T22:15:48.783 回答
3

在这个特定的例子中这有点毫无意义,因为你已经知道你想要的字符串,但无论如何我认为这就是你想要做的......

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

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