c# - 从接口(interface)调用 'IsAssignableFrom' 不返回具体类

标签 c# inheritance .net-4.0

我试图返回实现下面代码中定义的接口(interface)的类的对象类型。

linq 语句只返回接口(interface)本身,因此控制台输出只是:

AssignableExperiment.IRule

为什么不返回具体类?

using System;
using System.Linq;

namespace AssignableExperiment
{
    public interface IRule
    {
        void Validate(string s);
    }

    public class ConcreteRule : IRule
    {
        public void Validate(string s)
        {
           // some logic
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var ruleType = typeof(IRule);

            var ruleTypes = from t in ruleType.Assembly.GetTypes()
                            where t.IsAssignableFrom(ruleType)
                            select t;

            foreach (var type in ruleTypes)
            {
                Console.WriteLine(type);
            }

            Console.ReadLine();
        }
    }
}

最佳答案

我讨厌 IsAssignableFrom,它写得太邪恶了。

我总是滚动扩展:

public static bool IsTypeOf<T>(this Type type)
{
    return typeof (T).IsAssignableFrom(type);
}

使用它可以防止阴险的错误执行。

然后你可以写:

var ruleTypes = ruleType.Assembly.GetTypes().Where(t=> t.IsTypeOf<IRule>());

关于c# - 从接口(interface)调用 'IsAssignableFrom' 不返回具体类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8142485/

相关文章:

wcf - 无法在本地计算机上运行 WCF 服务

wpf - 从未引用的程序集加载时,Application.LoadComponent 失败

c# - 比较两个字典并返回另一个字典中的差异

c# - 应用程序在 Windows 10 中处于后台时的位置跟踪?

c# - 窗口服务的通知图标

JavaScript 继承问题不一致(所有子对象的父对象都是单个实例......或者不是?)

C++03 : Add fields to several derived classes

c# - 使用私有(private)字段或 DependencyProperty 支持绑定(bind)属性有什么区别?

c# - 在 NAudio 环回中使用均衡器

ios - NSCoding 的 Swift 通用方法