我知道这方面已经有一些问题,但我似乎无法让它发挥作用。
我有这样的课程;
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{}
答案 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))
{
}