유물을위한 확장 방법 : 메소드 유형 인수는 사용법에서 추론 할 수 없습니다.

StackOverflow https://stackoverflow.com/questions/1615687

  •  06-07-2019
  •  | 
  •  

문제

많은 반복 코드를 정리하려고 시도하면서 아래의 확장 방법을 구현하려고 시도했습니다.

    public static void AddIfNotPresent(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)
    {
        if (!dictionary.ContainsKey(key))
        {
            dictionary.Add(key, value);
        }
    }

    public static void Test()
    {
        IDictionary<string, string> test = new Dictionary<string, string>();
        test.AddIfNotPresent("hi", "mom");
    }

확장 메소드 호출 중에 컴파일러 오류가 발생합니다.

메소드 'util.test.addifnotpresent (이 system.collections.generic.idictionary dictionary, tkey key, tvalue value)' '에 대한 유형 인수는 사용법에서 추론 할 수 없습니다. 유형 인수를 명시 적으로 지정하십시오.

이 주제에 대한 빛은 대단히 감사 할 것입니다!

도움이 되었습니까?

해결책

확장 방법은 일반적이지 않지만 확장 메소드는 비 게 니체 최고 수준 클래스에서 정의되어야하므로 여야합니다. 일반적인 방법으로 만든 후 동일한 코드는 다음과 같습니다.

// Note the type parameters after the method name
public static void AddIfNotPresent<TKey, TValue>
    (this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)
{
    if (!dictionary.ContainsKey(key))
    {
        dictionary.Add(key, value);
    }
}

그러나 실제로 게시 한 코드를 컴파일하려고하면 지정된 코드와 다른 오류 메시지가 표시됩니다. 그것은 당신이 게시하지 않았다는 것을 암시합니다 진짜 코드 ... 따라서 위의 내용은 어쨌든 문제를 해결하지 못할 수 있습니다. 그러나 위의 변경 사항과 함께 게시 한 코드는 제대로 작동합니다.

다른 팁

이것은 단순히 이것으로 할 수 없습니까?

dictionary[key] = value;

키가 존재하지 않으면 키/값 쌍을 추가하거나 값을 업데이트합니다. 보다 Dictionary<TKey,TValue>.Item.

이 시도:

public static void AddIfNotPresent<TKey, TValue>
       (this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)    
{       
    if (!dictionary.ContainsKey(key)) dictionary.Add(key, value);
}   

public static void Test()    
{        
     IDictionary<string, string> test = new Dictionary<string, string>(); 
     test.AddIfNotPresent("hi", "mom");    
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top