如何创建扩展来检查对象是否是这些类型之一?

时间:2013-07-06 18:01:09

标签: c# .net object-type

通常,当我想检查一个对象是否是这些类型之一时,我使用以下代码:

object a = "ABC";

if (a is string || a is int || a is double)
{

}

我想创建一个缩短它的扩展方法,例如:

if (a.IsOneOfTheseType(string, int, double)
{

}

1 个答案:

答案 0 :(得分:3)

试试这个:

public static class ObjectExtensions {
    public static bool IsOneOfTypes(this object o, params Type[] types) {
        Contract.Requires(o != null);
        Contract.Requires(types != null);
        return types.Any(type => type == o.GetType());
    }
}

我没有编译器方便测试/检查愚蠢的错误,但这应该让你非常接近。请注意,这满足了“检查对象是[某些给定]类型之一”的要求。如果要检查可分配性,请将lambda表达式替换为

type => type.IsAssignableFrom(o.GetType())

请参阅Type.IsAssignableFrom了解确切的语义。

使用:

object a = "ABC";
bool isAStringOrInt32OrDouble =
    a.IsOneOfTypes(typeof(string), typeof(int), typeof(double));

object a = "ABC";
bool isAStringOrInt32OrDouble = 
    a.IsOneOfTypes(new[] { typeof(string), typeof(int), typeof(double) });