我想测试一个类型是否实现了一组接口之一。C#:测试一个对象是否实现了任何一个接口列表?
ViewData["IsInTheSet"] =
model.ImplementsAny<IInterface1, IInterface2, IInterface3, IInterface4>();
我写了下面的扩展方法来处理这个。
有没有一种更可扩展的方式来编写下面的代码?我宁愿不必在仍然利用泛型的同时编写新的方法。
public static bool Implements<T>(this object obj)
{
Check.Argument.IsNotNull(obj, "obj");
return (obj is T);
}
public static bool ImplementsAny<T>(this object obj)
{
return obj.Implements<T>();
}
public static bool ImplementsAny<T,V>(this object obj)
{
if (Implements<T>(obj))
return true;
if (Implements<V>(obj))
return true;
return false;
}
public static bool ImplementsAny<T,V,W>(this object obj)
{
if (Implements<T>(obj))
return true;
if (Implements<V>(obj))
return true;
if (Implements<W>(obj))
return true;
return false;
}
public static bool ImplementsAny<T, V, W, X>(this object obj)
{
if (Implements<T>(obj))
return true;
if (Implements<V>(obj))
return true;
if (Implements<W>(obj))
return true;
if (Implements<X>(obj))
return true;
return false;
}
这对于http://s.tk/review来说可能是一个更好的问题。 – 2012-03-29 00:07:52
通过'typeof(InterfaceN)'存储'Type'对象,然后使用'obj.GetType()'并确定这种关系? – 2012-03-29 00:08:39