うーん、これは簡単な質問に思えるかもしれませんが、最速の方法を知りたいです。
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();
}
}
綺麗にはなりませんが。
更新: を扱う場合を除いて、このアプローチはわずかに遅いことが判明しました。したがって、最も実用的な決定は keep のようです。decimal
Convert.ToDouble
object bla = 2343;
if ( bla is Number )
{
bool t = (Number)bla > 0;
}