2012-07-18 60 views
1

这是我一直想知道的,并抬头几次,但从未想通。有没有办法使它看起来像一个foreach看返回值?

所以基本上我想要做的就是找些这样的效果:

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

这样的话之后,ASTRING的值为“C”。

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

很明显,我想做一些比我上面的例子更复杂的东西,但它会以同样的方式工作。

可能吗?不可能?

回答

5

您应该使用FirstOrDefault扩展方法。

List<string> strings = new List<string>(){"a","b","c"}; 
return strings.FirstOrDefault(s=>String.Equals(s, "a")); 
+0

你有第一个“右呃”的答案。谢谢:) – Toadums 2012-07-18 22:53:33

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(),因为它有接受谓词过载:

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

有提供一些其他有用的方法,它可以read about here

+0

你不”你需要“Where”。 'FirstOrDefault'接受一个谓词。 – 2012-07-18 22:17:53

+0

@MichaelGraczyk好点,我总是忘记那个过载。 – dlev 2012-07-18 22:18:59

+0

所以这对foreach在我的问题标题中看起来很好,但是有没有办法让一段文本在'='(等号)之后返回一个值?......或者这只是不好的做法。 – Toadums 2012-07-18 22:19:03

3

这是一种在这个特殊的例子毫无意义的,因为你已经知道你想要的字符串,但在任何情况下,我想这是你想要做什么......

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

string aString = strings.Find((string s) => s == "a"); 
相关问题