А как же
public static void GetValueAs<T, R>(this IDictionary<string, R> dictionary, string fieldName, out T value)
where T : R
{
value = default(T);
dictionary.TryGetValue(fieldName, out value)
}
Тогда вы можете сделать что-то вроде
List<int> list;
dictionary.GetValueAs("fieldName", out list);
По сути, чтобы определить, что это за T, нужно иметь что-то типа T в параметрах.
Редактировать
Может быть, лучший способ будет
public static T GetValueAs<T, R>(
this IDictionary<string, R> dictionary,
string fieldName,
T defaultValue)
where T : R
{
R value = default(R);
return dictionary.TryGetValue(fieldName, out value) ?
(T)value : defaultValue;
}
Затем вы можете использовать var и chain, и это дает вам возможность контролировать то, что по умолчанию.
var x = dict.GetValueAs("A", new Dictionary<string,int>).GetValueAs("B", default(int));