我试图返回实现下面代码中定义的接口的类的对象类型。
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(使用前将#替换为@)