gpt4 book ai didi

c# - 使用 LINQ 获取接口(interface)类型 [] 上的所有方法?

转载 作者:太空狗 更新时间:2023-10-29 21:15:00 24 4
gpt4 key购买 nike

我试图通过反射找到接口(interface)授予我的所有方法。我有一个类型数组,我验证它只有接口(interface),我需要从那里提取所有方法。不幸的是,如果我做类似 typeof(IList).GetMethods() 的事情,它只返回 IList 上的方法而不是 ICollection 上的方法,或者可枚举我尝试了以下 linq 查询,但它没有返回在外部接口(interface)上找到的方法。如何修复我的查询?

from outerInterfaces in interfaces
from i in outerInterfaces.GetInterfaces()
from m in i.GetMethods()
select m

如果这是 SQL,我可以使用 union all 做类似递归 CTE 的事情,但我认为 C# 中不存在这样的语法。有人可以帮忙吗?

最佳答案

这样的事情怎么样:

 typeof(IList<>).GetMethods().Concat(typeof(IList<>)
.GetInterfaces()
.SelectMany(i => i.GetMethods()))
.Select(m => m.Name)
.ToList().ForEach(Console.WriteLine);

编辑:对评论的回应。

用这段代码测试过:

    public interface IFirst
{
void First();
}

public interface ISecond : IFirst
{
void Second();
}

public interface IThird :ISecond
{
void Third();
}

public interface IFourth : IThird
{
void Fourth();
}

测试代码:

        typeof(IFourth).GetMethods().Concat(typeof(IFourth)
.GetInterfaces()
.SelectMany(i => i.GetMethods()))
.Select(m => m.Name)
.ToList().ForEach(Console.WriteLine);

输出是:

Fourth
Third
Second
First

关于c# - 使用 LINQ 获取接口(interface)类型 [] 上的所有方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4216908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com