Во-первых, проблема.Вы не можете вернуть T, который является параметром типа.Это будет эквивалентно return int
, что недопустимо.
Но вы можете увидеть, есть ли у T свойство MaxValue
, и вызвать его, если оно есть.Приведенный ниже код проверяет статическое свойство с именем MaxValue
и вызывает его (и предполагает, что это int).
Type type = typeof (T);
var propInfo = type.GetProperty("MaxValue", BindingFlags.Static | BindingFlags.Public);
if (propInfo != null)
return (int)propInfo.GetValue(null, null);
Я предполагаю, что вы хотите что-то вроде этого:
public static T GetValueOrMax<T>(T value) where T:IComparable
{
if (value != null)
return value;
Type type = typeof (T);
var propInfo = type.GetProperty("MaxValue", BindingFlags.Static | BindingFlags.Public);
if (propInfo != null)
return (T)propInfo.GetValue(null, null);
return value;
}
Ноу него будут свои проблемы, если вы передадите int, он никогда не будет нулевым и всегда будет возвращать value
.Если вы передадите nullable int, то он не будет реализовывать MaxValue (на самом деле вы не можете передать nullable int, поскольку он не реализует IComparable).
A, где условие where T:class, IComparable
можетбыть наиболее подходящим.
Другим вариантом было бы изменить проверку в начале на
if (value != default(T))
return value
Но тогда передача 0 вернула бы MaxValue, а не 0, что может быть не тем, что вы хотите.