3
我真的很討厭IDictionary<TKey, TValue> [key]
會在字典中不存在該鍵時拋出異常。在編寫泛型擴展方法時遇到類型推斷問題
當然有TryGetValue()
,但似乎已經優化了性能,而不是可用性。
所以我想,哦,我只會讓它的擴展方法 - 這是我做的:
public static class CollectionExtensions
{
public static TType GetValueOrDefault<TKeyType, TValue, TType>(this IDictionary<TKeyType, TType> dictionary, TKeyType key)
{
TType value = default(TType);
// attempt to get the value of the key from the dictionary
// if the key doesn't exist just return null
if (dictionary.TryGetValue(key, out value))
{
return value;
}
else
{
return default(TType);
}
}
}
這工作得很好除了我似乎無法得到類型推斷工作。
顯然,我希望能夠做到以下幾點:
var extraDataLookup = new Dictionary<string, string>();
extraDataLookup["zipcode"] = model.Zipcode;
,然後能夠訪問該值:
var zipcode = extraDataLookup.GetValueOrDefault("zipcode");
var foo = extraDataLookup.GetValueOrDefault("foo"); // should be null
我已經看了約的類型推斷的幾件事情,牽扯Jon Skeet's article甚至源代碼System.Linq.Enumerable
reflector但似乎缺少的東西。
這工作:
extraDataLookup.GetValueOrDefault<string, string,string> ("foo")
但這並不
extraDataLookup.GetValueOrDefault ("foo")
,我應該怎麼做。
PS。我只是在尋找解決通用類型推斷問題的方法,而不是其他任何建議。謝謝。
woops。謝謝。現在像魔術一樣工作 – 2009-02-03 04:39:37