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();
    }
}

綺麗にはなりませんが。

更新: を扱う場合を除いて、このアプローチはわずかに遅いことが判明しました。したがって、最も実用的な決定は keep のようです。decimalConvert.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 に答える