2012-07-18 57 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"); 
相關問題