1

嗯,这似乎是一个简单的问题,但我想知道最快的方法。

我有一个对象,它是一个盒装数字,我不知道它是double,int还是某种数字类型。我想检查装箱值是否为负。

我使用这种转换,但我不确定它是否尽可能快:

private bool CheckNegative(object number)
{
   return System.Convert.ToDouble(number) < 0;
}

阿尔森

4

4 回答 4

4

在此处使用 C# 版本 4动态关键字来利用其动态运算符绑定:

private static bool CheckNegative(dynamic number)
{
   return number < 0;
}

也适用于盒装值类型。

于 2012-08-02T13:55:12.097 回答
3

这似乎是唯一的方法。

但是,如果您想避免编写使用 double、int、float 等检查负数的多个函数,我会将您重定向到以下帖子:https ://stackoverflow.com/a/828820/150830

于 2012-08-02T13:47:58.693 回答
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();
    }
}

不过不会很漂亮。

更新: 事实证明这种方法稍微一些,除了在处理decimal. 所以最好的实际决定似乎是 keep Convert.ToDouble

于 2012-08-02T13:51:39.757 回答
-4
object bla = 2343;

if ( bla is Number )
{
     bool t = (Number)bla > 0;
}
于 2012-08-02T13:39:25.460 回答