如何检查盒装数值是否为负值?

时间:2012-08-02 13:30:00

标签: c#

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

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

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

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

阿尔森

4 个答案:

答案 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;
}