首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型数值类型

泛型数值类型
EN

Stack Overflow用户
提问于 2015-07-16 01:14:06
回答 4查看 392关注 0票数 4

我有一个接受参数T的扩展方法。此参数是数值类型,可以是以下类型之一: byte、short、int和long。

我需要检查T是否等于0。怎么可能做到这一点?

代码语言:javascript
复制
public static void WriteFlaggedValue<T>(this OutPacket outPacket, uint flag, T value, ref uint outputFlag) where T : struct,
      IComparable,
      IComparable<T>,
      IConvertible,
      IEquatable<T>,
      IFormattable
    {
        if (value == 0)
        {

        }

    }
EN

回答 4

Stack Overflow用户

发布于 2015-07-16 01:16:59

您可以像这样使用EqualityComparer

代码语言:javascript
复制
if(EqualityComparer<T>.Default.Equals(value, default(T))
{
}

堆栈溢出:EqualityComparer.Default vs. T.Equals

MSDN:EqualityComparer.Default

票数 5
EN

Stack Overflow用户

发布于 2015-07-16 01:22:55

您必须这样做的一种选择是使用IComparable接口的compareTo方法,并使用default type value...

如果它们相等,它将返回0作为is specified here

条件将如下所示:

代码语言:javascript
复制
if (value.CompareTo(default(T)) == 0)

在您的方法中使用:

代码语言:javascript
复制
public static void WriteFlaggedValue<T>(this OutPacket outPacket, uint flag, T value, ref uint outputFlag) where T : struct,
      IComparable,
      IComparable<T>,
      IConvertible,
      IEquatable<T>,
      IFormattable
    {
        if (value.CompareTo(default(T)) == 0)
        {

        }

    }

如果值可以是null,那么你必须处理它。

票数 1
EN

Stack Overflow用户

发布于 2015-07-16 01:25:25

这样如何:

代码语言:javascript
复制
private T _minimumValue = default(T)

public bool IsEqualsZero(T value) 
{
    return (value.CompareTo(_minimumValue) == 0);
}

按照This Answer中的建议

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31436872

复制
相关文章

相似问题

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