2009-12-01 4 views
1

방금 ​​람다 식을 배우기 시작했습니다. 람다 식 - 컬렉션에 추가하지 않을 경우

 Customer customer = Customers.FirstOrDefault(c => c.ID == 3); 
     if (customer == null) 
     { 
      customer = new Customer() { FirstName = "Ben", LastName = "Foster", ID = 3 }; 
      Customers.Add(customer); 
     } 

     // do something with customer 
     customer.CreateProfile(); 

은 기본적으로 내가 객체가 컬렉션에 있는지 확인하려면 :

이 가능 아래로 더 다음 코드를 단순화하는 것입니다. 작성하고 싶지 않다면 컬렉션에 추가하고 나중에 사용하십시오.

덕분에 벤 서면으로

+0

나에게 잘 보이는 http://www.surcombe.com/nhibernate-1.2/api/html/N_Iesi_Collections.htm에서 Iesi.Collections를 살펴 보자. – mquander

답변

5

, 그렇지 않아 더 이상 분명히 읽을 수 유지를 위해 필요한 것보다 될 것으로 보인다. 람다와 운영자 ??을 여기에 모두 한 줄로 작성하는 것은 명백하게 해킹 방법이 있지만 궁극적으로 코드를 난독 화하는 역할을합니다.

1

이것은 당신이 이해할 수있는 것처럼 간단 할 수 있지만, Pavel이 말했듯이, 한 줄에 쓰는 것은 약간 hackish입니다. 여기 어쨌든, 당신이 호기심이 있다면.

Customer customer = Customers.FirstOrDefault(c => c.ID == 3).DefaultIfEmpty(new Customer() { FirstName = "Ben", LastName = "Foster", ID = 3 }); 
customer.CreateProfile();
+1

고객이 새로 생성 된 경우 고객을 '추가()'할 수있는 방법을 찾아야합니다. –

1

파벨이 맞습니다. 제쳐두고 루프에서이 작업을 수행하는 경우 HashSet이나 사전에 Id가 포함 된 사전을 검색 용으로 키를 사용하여 컬렉션 자체 옆에 O가 없도록하고 싶을 것입니다 (n²) 복잡성.

1

일반 콜렉션 대신 Set 구현을 사용할 수 있습니다.