If statement simplification in C#

时光怂恿深爱的人放手 提交于 2020-01-01 09:21:50

问题


I have a line of code that looks like this:

if (obj is byte || obj is int || obj is long || obj is decimal || obj is double || obj is float)

Is it possible to write something more elegant than this? Something like:

if (obj is byte, int, long)

I know that my example isn't possible, but is there a way to make this look "cleaner"?


回答1:


You could write an extension method on object to give you syntax like:

if (obj.Is<byte, int, long>()) { ... }

Something like this (use multiple versions for fewer or more generic arguments:

public static bool Is<T1, T2, T3>(this object o)
{
    return o is T1 || o is T2 || o is T3;
}



回答2:


Only:

static readonly HashSet<Type> types = new HashSet<Type> 
    { typeof(byte), typeof(int), typeof(long) etc };

...

if (types.Contains(obj.GetType())
{
}

Or use obj.GetType().GetTypeCode().




回答3:


I would throw it into a method to simplify it a bit:

private static bool ObjIsNumber(object obj)
{
    return  (obj is byte || obj is int || obj is long || 
             obj is decimal || obj is double || obj is float);
}



回答4:


Why don't you do this?

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

Or you might be able to get away with

obj is IComparable



回答5:


That looks fine to me - nice and clear.




回答6:


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



回答7:


Create a helper function to put your test in.

Something like

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


来源:https://stackoverflow.com/questions/1194375/if-statement-simplification-in-c-sharp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!