2011-07-26 3 views
2

기본적으로, 나는 궁금 :LINQ? 거기에 찾을 수없는 AddIf가 있습니까? 이미 할 수있는 방법이 존재하는 경우

것은 지금은이 :

dictionary.AddIf(KeyA, ValueA, ...) 
//etc? 

내가 추가를 :

if (func()) 
{ 
    dictionary.add(KeyA, ValueA); 
} 

if (func2(myString)) 
{ 
    dictionary.add(KeyB, ValueB); 
} 

if (anonymous predicate) 
{ 
    dictionary.Add(KeyC, ValueC); 
} 

이미 할 수있는 방법이 존재 하는가 using System.Linq하지만 거기에는 없습니다.

+0

LINQ는 철학적으로 그런 방법에 반대합니다. LINQ는 기능적이며 부작용이 없음을 의미합니다. 이 방법은 부작용에만 유용합니다. –

답변

4

가 내장 아무것도 - 나는 직관적이 구문을 찾을 수없는이 있지만 당신을 돕기 위해 자신의 확장 메서드 (들)을 작성할 수

public static class DictionaryHelper 
{ 
    public static void AddIf<T, U>(this Dictionary<T, U> dict, 
            T key, 
            U value, 
            Predicate<T> pred) 
    { 
     if (pred(key)) 
      dict.Add(key, value); 
    } 
} 

샘플 사용 :

Dictionary<string, string> dict = new Dictionary<string, string>(); 
Predicate<string> predicate = key => { return key.Length == 3; }; 

dict.AddIf("foo", "bar", predicate); //foo added 
dict.AddIf("tooLong", "baz", predicate); //toolong not added 
0

내가 일을 잘못 아무것도 표시되지 않습니다

if (func()) 
{ 
    dictionary.add(KeyA, ValueA); 
} 

AddIf은 불필요하게 코드를 읽기 어렵게 만듭니다. 사전 자체가 키와 값으로 술어 또는 함수를 갖는 경우를 고려하십시오.

그리고 LINQ에는 원하는 확장명이 없습니다.

관련 문제