Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何了解接口是否派生自特定接口?_C#_Reflection - Fatal编程技术网

C# 如何了解接口是否派生自特定接口?

C# 如何了解接口是否派生自特定接口?,c#,reflection,C#,Reflection,我有这样一个界面: public interface IViewA : IViewB, IViewC { byte prop { get; set; } } public void OpenPopup<T>(WindowState state) { if ((typeof(T) as IViewC)!=null) { //Process A } else { //Process B }

我有这样一个界面:

 public interface IViewA : IViewB, IViewC
 {
    byte prop { get; set; }
 }
public void OpenPopup<T>(WindowState state)
{
    if ((typeof(T) as IViewC)!=null)
    {
         //Process A
    }
    else
    {
        //Process B
    }
我有一个这样的通用方法:

 public interface IViewA : IViewB, IViewC
 {
    byte prop { get; set; }
 }
public void OpenPopup<T>(WindowState state)
{
    if ((typeof(T) as IViewC)!=null)
    {
         //Process A
    }
    else
    {
        //Process B
    }
public void OpenPopup(WindowsState状态)
{
如果((T的类型为IViewC)!=null)
{
//过程A
}
其他的
{
//过程B
}
}

虽然我将T作为从IViewC派生的接口发送,但进程A未被处理

那么,如何在运行时通过反射了解一个接口是否派生自其他接口呢


谢谢

而不是
typeof
使用
isAssignableFrom

尝试以下操作

if ( typeof(IViewC).IsAssignableFrom(typeof(T)) { 
  ...
}
这是错误的。您编写的内容测试
typeof(T)
返回的
Type
对象是否是
IViewC
,而它显然不是

你想要:

if (typeof(IViewC).IsAssignableFrom(typeof(T))

尝试类似于
typeof(IViewC)的方法。IsAssignableFrom(typeof(T))

现在您正试图将
typeof(T)
视为
系统。将
视为
IViewC
,这将不起作用。

typeof(T)视为IViewC
是完全错误的。您正在尝试从
类型
转换到
IViewC
,这将始终失败,始终导致null


您需要
typeof(T).GetInterfaces()
,然后查看返回的列表,看看您的接口是否在其中。

typeof(T)
将始终是一个系统。type我认为这也是错误的。C#中的“is”运算符只能用于参考值。T是泛型类型参数。请显示示例代码。我这样问是因为我认为答案两者都需要。