测试类是否继承通用接口

时间:2011-12-16 02:31:39

标签: c# generics

我知道这方面已经有一些问题,但我似乎无法让它发挥作用。

我有这样的课程;

public class TopLocation<T> : ILocation
{
    public string name { get; set; }
    public string address { get; set; }
}

创建课程时,我指定它是IRestaurant还是IClub。到目前为止没问题。

但是,如何在IClub语句中测试它是IRestaurant还是if

这失败了;

if (item.trendItem is ILocation<ITopRestaurant>)

然后返回null

               Type myInterfaceType = item.trendItem.GetType().GetInterface(
                   typeof(ITopRestaurant).Name);

我在if语句中喜欢这个的原因是因为它位于MVC应用程序的ascx页面中,我正在尝试渲染正确的局部视图。

修改

回应评论;

public interface ITopClub{}
public interface ITopRestaurant { }
public interface ILocation{}

2 个答案:

答案 0 :(得分:2)

你可以这样做:

if (item.trendItem is TopLocation<IRestaurant>) 

答案 1 :(得分:1)

首先,ILocation不是通用接口,因此尝试针对ILocation<T>测试任何内容都将失败。您的班级是通用类型。

其次,您试图弄清楚用作Generic Type的泛型参数的类型是否是给定的接口。为此,您需要获取该类型的通用类型参数,然后针对该类型执行检查:

var myInterfaceType = item.trendItem.GetType().GetGenericTypeArguments()[0];

if(myInterfaceType == typeof(ITopRestaurant))
{

}