嗯,这似乎是一个简单的问题,但我想知道最快的方法。
我有一个对象,它是一个盒装数字,我不知道它是double
,int
还是某种数字类型。我想检查装箱值是否为负。
我使用这种转换,但我不确定它是否尽可能快:
private bool CheckNegative(object number)
{
return System.Convert.ToDouble(number) < 0;
}
阿尔森
嗯,这似乎是一个简单的问题,但我想知道最快的方法。
我有一个对象,它是一个盒装数字,我不知道它是double
,int
还是某种数字类型。我想检查装箱值是否为负。
我使用这种转换,但我不确定它是否尽可能快:
private bool CheckNegative(object number)
{
return System.Convert.ToDouble(number) < 0;
}
阿尔森
在此处使用 C# 版本 4动态关键字来利用其动态运算符绑定:
private static bool CheckNegative(dynamic number)
{
return number < 0;
}
也适用于盒装值类型。
这似乎是唯一的方法。
但是,如果您想避免编写使用 double、int、float 等检查负数的多个函数,我会将您重定向到以下帖子:https ://stackoverflow.com/a/828820/150830
我想这可能会更快,因为它切入正题并且不需要将整数类型转换为 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();
}
}
不过不会很漂亮。
更新: 事实证明这种方法稍微慢一些,除了在处理decimal
. 所以最好的实际决定似乎是 keep Convert.ToDouble
。
object bla = 2343;
if ( bla is Number )
{
bool t = (Number)bla > 0;
}