我有類似下面的擴展方法:如何指定泛型方法類型參數部分
public static T GetValueAs<T, R>(this IDictionary<string, R> dictionary, string fieldName)
where T : R
{
R value;
if (!dictionary.TryGetValue(fieldName, out value))
return default(T);
return (T)value;
}
目前,我可以通過以下方式來使用它:
var dictionary = new Dictionary<string, object>();
//...
var list = dictionary.GetValueAs<List<int>, object>("A"); // this may throw ClassCastException - this is expected behavior;
它工作得很好,但第二個類型參數真的很煩人。是否有可能在C#4.0中重寫GetValueAs是這樣一種方式,該方法仍然適用於不同類型的字串鍵控字典,並且不需要在調用代碼中指定第二個類型參數,即使用
var list = dictionary.GetValueAs<List<int>>("A");
或至少類似的
var list = dictionary.GetValueAs<List<int>, ?>("A");
代替
var list = dictionary.GetValueAs<List<int>, object>("A");
因此,基本上你想要做的是從'字典'推斷'R'的類型,而不是指定它? – 2010-04-06 12:37:23
是的,這就是我想要的。 – DNNX 2010-04-06 13:14:14