我有一个盒装(任意)数字类型或可以为空的数字类型的值。我需要检查该值是否为零。
基本上我有这个:
public bool IsZero(object value)
{
if (value == null)
return false;
//lifted from the mvc sources, so I guess it's exhaustive
HashSet<Type> numericTypes = new HashSet<Type>(new Type[] {
typeof(byte), typeof(sbyte),
typeof(short), typeof(ushort),
typeof(int), typeof(uint),
typeof(long), typeof(ulong),
typeof(float), typeof(double),
typeof(decimal)
});
Type type = Nullable.GetUnderlyingType(value.GetType()) ?? value.GetType();
if (!numericTypes.Contains(type))
return false;
// how do I get the value here ?
}
我没有看到一种简单的方法来比较int值和int 0,以及一个字节值为0的字节值。
我看到的一个解决方法是将正确键入的零值与每种类型相关联并检查,但是如果我最终需要“IsOne”方法,我想重用该解决方案。
答案 0 :(得分:8)
这有什么问题?
return value != null && value.ToString().Equals("0");
答案 1 :(得分:4)
您可以将null
检查与Convert.ToDouble
方法结合使用。
答案 2 :(得分:0)
我会考虑将值转换为类似于字符串的内容,然后进行比较,因此不是将字节与字节,int转换为int等,而是将所有内容转换为字符串并进行比较。如果你不喜欢字符串,你可以将它们投射到你喜欢的任何地方,只要你确保价值不会改变等。
如果你想将每种类型与它自己类型的0值进行比较,你可以做的另一种(更长)的方法是对类型做一个case语句,但最后会得到更多的代码。< / p>