我有一个盒装数字的对象,我不知道它是double
,int
还是某种数字类型。我想检查盒装值是否为负值。
我使用此转换但我不确定它是否尽可能快:
private bool CheckNegative(object number)
{
return System.Convert.ToDouble(number) < 0;
}
阿尔森
答案 0 :(得分:4)
在此处使用C#版本4 动态关键字以利用其动态运算符绑定:
private static bool CheckNegative(dynamic number)
{
return number < 0;
}
也适用于盒装值类型。
答案 1 :(得分:3)
这似乎是唯一的方法。
但是如果你想避免编写多个带有double,int,float等的函数来检查负数,我会将你重定向到以下帖子:https://stackoverflow.com/a/828820/150830
答案 2 :(得分:1)
我认为可能更快,因为它切入追逐并且不需要将整数类型转换为IEEE浮点数:
bool CheckNegative(object number)
{
switch(Type.GetTypeCode(number.GetType())) {
case TypeCode.Int32:
return (int)number < 0;
case TypeCode.Single:
return (float)number < 0;
// etc etc
default:
throw new ArgumentException();
}
}
虽然不会很漂亮。
更新: Turns out此方法稍微较慢,除非处理decimal
时。所以最好的实际决定似乎是Convert.ToDouble
。
答案 3 :(得分:-4)
object bla = 2343;
if ( bla is Number )
{
bool t = (Number)bla > 0;
}