从接口调用“IsAssignableFrom”不会返回具体类

2024-05-06

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

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

可分配实验.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>());

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从接口调用“IsAssignableFrom”不会返回具体类 的相关文章

随机推荐