私は単純なクランプを作成しようとしています(比較可能なものの値をバインドできるように...主にint、doubleなどの数値型の場合)
問題は、次のようにするとエラーが発生することですが、MSDN によると、 IComparable の CompareTo は null 値を処理できるはずです。
引用: 「定義上、すべてのオブジェクトは null より大きいと比較され、2 つの null 参照は互いに等しいと比較されます。」
public static T Clamp<T>(this T value, T min, T max)
where T : IComparable<T>
{
if (value.CompareTo(max) > 0)
return max;
if (value.CompareTo(min) < 0)
return min;
return value;
}
private Int32? _zip;
public Int32? Zip
{
get
{
return _zip;
}
set
{
_zip = value.Clamp<Int32?>(0, 99999);
}
}