c#句法糖超载

sam*_*cow 2 c# generics operator-overloading

我有以下方法:

virtual public int nonNeg(int? numIn)
    {
        if ((numIn < 0) || (numIn ==null))
        {
            return 0;
        }
        else return (int)numIn;

    }
Run Code Online (Sandbox Code Playgroud)

我希望能够有一个单一的方法,可以采用字节,短路或整数来强制这些值为非负数.我怎么能做到这一点?

Nic*_*ick 5

或者只是使用 Math.Max( 0, numIn)


Chr*_*lor 5

我通常不建议这样做,但是在我的脑海中,以下超载应该涵盖大多数情况.它们将涵盖可空类型和非可空类型,编译器将选择适当的重载.

public static T nonNeg<T>(T n) where T : struct, IComparable
{
  if (n.CompareTo(default(T)) <= 0)
  {
    return default(T);
  }
  return n;
}

public static T nonNeg<T>(T? n) where T : struct, IComparable 
{
  if (!n.HasValue || n.Value.CompareTo(default(T)) <= 0)
  {
    return default(T);
  }
  return n.Value;
}
Run Code Online (Sandbox Code Playgroud)