У меня есть метод расширения, как показано ниже:Как указать общие параметры типа метода частично
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' из словаря, не указывая его? –
Да, это то, чего я хочу. – DNNX