我有以下方法:
virtual public int nonNeg(int? numIn)
{
if ((numIn < 0) || (numIn ==null))
{
return 0;
}
else return (int)numIn;
}
我希望能够有一个方法可以接受字节,短路或整数来强制这些值为非负数。我怎么能做到这一点?
答案 0 :(得分:5)
或者只使用Math.Max( 0, numIn)
答案 1 :(得分: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;
}
答案 2 :(得分:2)
可能是这样的(测试过的):
virtual public T nonNeg<T>(T numIn) where T : IComparable<T>
{
if (numIn==null){
return default(T);
}
if (Comparer<T>.Default.Compare(numIn,default(T))<0)
{
return default(T);
}
else
return (T)numIn;
}
答案 3 :(得分:1)
我认为你可以这样做:
int negativeNumber = -22;
int nonNegativeNumber = Math.Abs(negativeNumber);
结果将是22
OR
decimal negativeNumber = -22.2;
decimal nonNegativeNumber = Math.Abs(negativeNumber);
结果将是22.2