유물을위한 확장 방법 : 메소드 유형 인수는 사용법에서 추론 할 수 없습니다.
-
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");
}
제휴하지 않습니다 StackOverflow