gpt4 book ai didi

C#:测试一个对象是否实现了接口(interface)列表中的任何一个?

转载 作者:太空狗 更新时间:2023-10-30 00:55:20 26 4
gpt4 key购买 nike

我想测试一个类型是否实现了一组接口(interface)中的一个。

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

最佳答案

为什么不使用类似下面的东西:

public static bool ImplementsAny(this object obj, params Type[] types)
{
foreach(var type in types)
{
if(type.IsAssignableFrom(obj.GetType())
return true;
}

return false;
}

然后你可以这样调用它:

model.ImplementsAny(typeof(IInterface1),
typeof(IInterface2),
typeof(IInterface3),
typeof(IInterface4));

关于C#:测试一个对象是否实现了接口(interface)列表中的任何一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9917417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com