Помните, Int32?
это сокращение от Nullable<Int32>
. Поскольку Nullable<T>
не реализует IComparable<T>
, ваш код, как структурированный, не будет компилироваться.
Однако вы можете перегрузить метод:
public static T? Clamp<T>(this T? value, T? min, T? max)
where T : struct, IComparable<T>
{
// your logic...
}
Конечно, если вы планируете работать с обнуляемыми типами, вы должны определить, как вы будете фиксировать null
значения ...
Если вам на самом деле не нужно фиксировать значения null
, может быть проще просто сначала проверить нулевое значение в получателе вашего свойства:
public Int32? Zip
{
...
set
{
_zip = value == null ? value : value.Value.Clamp<Int32>(0,99999);
}
Или, что еще лучше, сделать его частью реализации дополнительной перегрузки для Clamp
...