2012-07-18 3 views
1

이것은 내가 항상 궁금해하고 몇 번 보았지만 결코 알아 내지 못한 것입니다. aString은 값이 "C"가,foreach 모양이 값을 반환하는 것처럼 보이게하는 방법이 있습니까?

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

을 그래서 그 이후 :

그래서 기본적으로 내가하고 싶은 것을이 효과에 뭔가를 얻을 수있다.

람다 표현식을 사용해 보았습니다. 아마도 제대로 작동하지 않을 수도 있고, 그렇지 않을 수도 있습니다.

분명히 위의 예보다 조금 더 복잡한 작업을하고 싶지만 같은 방식으로 작동합니다.

가능합니까? 가능하지 않니?

답변

5

FirstOrDefault 확장 방법을 사용해야합니다. 당신은 이미 당신이 원하는 문자열을 알고 있지만 어떤 경우에 나는 이것이 당신이 뭘하려는 건지 생각하기 때문에 종류이 특정 예에서의 무의미

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

당신은 "오른쪽 - 어"대답을 먼저했다. 감사합니다 :) – Toadums

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'는 술어를 취합니다. –

+0

@MichaelGraczyk 좋은 점은, 나는 항상 그 과부하를 잊어 버린다. – dlev

+0

그래서 내 질문 헤더에서 foreach 모양을 잘 작동하지만 '='(등호) 다음에 값을 반환하는 텍스트 블록을 넣는 방법이 있습니까? 아니면 그냥 나쁜 습관입니다. – Toadums

3

...

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

string aString = strings.Find((string s) => s == "a"); 
관련 문제