中の文の簡素化が、私はこのようなコードの行がある場合:C#の
if (obj is byte || obj is int || obj is long || obj is decimal || obj is double || obj is float)
それはこれ以上エレガントな何かを書くことは可能ですか?次のようなものがあります:
if (obj is byte, int, long)
私の例は不可能ですが、この見た目を「よりクリーン」にする方法はありますか?
中の文の簡素化が、私はこのようなコードの行がある場合:C#の
if (obj is byte || obj is int || obj is long || obj is decimal || obj is double || obj is float)
それはこれ以上エレガントな何かを書くことは可能ですか?次のようなものがあります:
if (obj is byte, int, long)
私の例は不可能ですが、この見た目を「よりクリーン」にする方法はありますか?
あなたが好きなの構文与えるために、オブジェクト上の拡張メソッドを書くことができる:この(より少ない、またはより一般的な引数のための複数のバージョンを使用するような何か
if (obj.Is<byte, int, long>()) { ... }
:
public static bool Is<T1, T2, T3>(this object o)
{
return o is T1 || o is T2 || o is T3;
}
どうすればよろしいですか?
bool IsRequestedType(object obj)
{
if (obj is byte || obj is int || obj is long || obj is decimal || obj is double || obj is float)
return true;
return false;
}
それとも、それを少し簡単にするために
obj is IComparable
cmon、 'if(true)return true; else false false;' - Ishy – jjnguy
私はちょうど –
それとも単に迅速にそれをやった:。。 ブールIsRequestedType(オブジェクトobj) { 戻りobjがバイト|| OBJ IS int型|| OBJ長い||のOBJですが、小数点||のobjが二重である|| objは浮動小数点であり; } –
私には正常に見える - 素敵な明らかである。
のみ:
static readonly HashSet<Type> types = new HashSet<Type>
{ typeof(byte), typeof(int), typeof(long) etc };
...
if (types.Contains(obj.GetType())
{
}
またはobj.GetType().GetTypeCode()
を使用しています。
は、ヘルパー関数を作成します。あなたのテストを入れてください。
何かのように
public static Boolean IsNumeric(Object myObject) {
return (obj is byte || obj is int || obj is long || obj is decimal || obj is double|| obj is float);
}
public static bool IsOneOf(object o, params Type[] types)
{
foreach(Type t in types)
{
if(o.GetType() == t) return true;
}
return false;
}
long l = 10;
double d = 10;
string s = "blah";
Console.WriteLine(IsOneOf(l, typeof(long), typeof(double))); // true
Console.WriteLine(IsOneOf(d, typeof(long), typeof(double))); // true
Console.WriteLine(IsOneOf(s, typeof(long), typeof(double))); // false
構文が利用可能であることを希望します。 :-( – Greg
このすべてのハッカーは、INUMericのように動作するようにするだけです –
数値型のためだけでなく、カスタム型とも比較する必要があります。 –