首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#语法糖重载

c#语法糖重载
EN

Stack Overflow用户
提问于 2011-05-25 00:12:38
回答 4查看 357关注 0票数 2

我有以下方法:

代码语言:javascript
复制
virtual public int nonNeg(int? numIn)
    {
        if ((numIn < 0) || (numIn ==null))
        {
            return 0;
        }
        else return (int)numIn;

    }

我希望能够有一个单一的方法,它可以接受字节、短整型或整型数来强制这些值为非负数。我怎么才能做到这一点呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-25 00:29:15

我通常不会建议这样做,但不经意间,下面的重载应该涵盖了您的大多数情况。它们将覆盖可空类型和不可空类型,编译器将选择适当的重载。

代码语言:javascript
复制
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;
}
票数 5
EN

Stack Overflow用户

发布于 2011-05-25 00:20:09

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

票数 5
EN

Stack Overflow用户

发布于 2011-05-25 00:15:42

可能是这样(测试过的):

代码语言:javascript
复制
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;
        }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6113461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档