从接口调用“ IsAssignableFrom”不会返回具体的类 [英] Calling 'IsAssignableFrom' from an interface doesn't return the concrete class
本文介绍了从接口调用“ IsAssignableFrom”不会返回具体的类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图返回实现下面代码中定义的接口的类的对象类型。
I am trying to return the object type of the class that implements the interface defined in the code below.
linq语句仅返回接口本身,因此控制台输出为:
The linq statement only returns the interface itself, and so the console output is just:
AssignableExperiment.IRule
AssignableExperiment.IRule
为什么不返回具体的类?
Why isn't the concrete class being returned?
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
MSDN 。因为 IsAssignableFrom
可以按照预期的另一种方式工作: BaseType.IsAssignableFrom(DerviedType)
返回true。
You should turn it around the IsAssignableFrom
MSDN. Because IsAssignableFrom
works another way around as expected: BaseType.IsAssignableFrom(DerviedType)
returns true.
var ruleTypes = from t in ruleType.Assembly.GetTypes()
where ruleType.IsAssignableFrom(t)
select t;
如果您不想找回 IRule
:
var ruleTypes = from t in ruleType.Assembly.GetTypes()
where ruleType.IsAssignableFrom(t) && t != ruleType
select t;
这篇关于从接口调用“ IsAssignableFrom”不会返回具体的类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文