2012-03-05 2 views
1

나는 ConcurrentDictionary을 가지고 있습니다. 나는 그 아이템을 조작하기 위해 그것의 AddOrUpdate 메소드를 사용한다.ConcurrentDictionary AddOrUpdate by 述語

제 질문은 AddOrUpdate의 업데이트 매개 변수를 사용하여 if 문을 포함 할 수 있습니까? 예 : 내 ConcurrentDictionary 문자열 ID 및 DateTime 날짜 속성이 개체가 들어 있습니다.

내가 원했던 것 - 주어진 ID를 가진 객체가없는 경우 새 객체를 추가하십시오. - 새 객체의 Date가 기존 객체보다 크거나 같으면 업데이트하십시오. 아무것도하지 않는 것보다 적습니다. 내 예에서

:

Dictionary.AddOrUpdate(testObject.Id,testObject,(k, v) => v); 

나는 원래 값을 반환하도록 updateValueFactory 람다이 될 것입니다이를 달성하기

(k, v) => v 

if(v.Date >= existingItem.Date) (k, v) => v 
else do nothing 

답변

4

는 현재 컬렉션에있는 값이므로 아무 것도 반환하지 않습니다.

Dictionary.AddOrUpdate(testObject.Id,testObject,(k, v) => 
    (v.Date >= existingItem.Date) ? testObject : v); 

더 읽기 :

Dictionary.AddOrUpdate(testObject.Id,testObject,(k, v) => 
{ 
    if(v.Date >= existingItem.Date) 
     return testObject; 
    else 
     return v; 
}); 
3

하는 간단한 방법을 변경해야합니다 새 값이 크지 않은 경우 :