我有一个接受参数T的扩展方法。此参数是数值类型,可以是以下类型之一: byte、short、int和long。
我需要检查T是否等于0。怎么可能做到这一点?
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)
{
}
}发布于 2015-07-16 01:16:59
您可以像这样使用EqualityComparer类
if(EqualityComparer<T>.Default.Equals(value, default(T))
{
}发布于 2015-07-16 01:22:55
您必须这样做的一种选择是使用IComparable接口的compareTo方法,并使用default type value...
如果它们相等,它将返回0作为is specified here。
条件将如下所示:
if (value.CompareTo(default(T)) == 0)在您的方法中使用:
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,那么你必须处理它。
发布于 2015-07-16 01:25:25
这样如何:
private T _minimumValue = default(T)
public bool IsEqualsZero(T value)
{
return (value.CompareTo(_minimumValue) == 0);
}按照This Answer中的建议
https://stackoverflow.com/questions/31436872
复制相似问题