gpt4 book ai didi

c# - 反射(reflection):如何创建一个精确过滤的程序集类型列表?

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:53 24 4
gpt4 key购买 nike

foreach (var item in Assembly.GetExecutingAssembly().GetTypes()
.Where(x => x.BaseType == typeof(Item)))
{
comboBox1.Items.Add(item);
}
comboBox1.DisplayMember = "Name";

是否可以对此进行修改,以便列表将包含所有派生自“Item”的类,即使它们被删除了两次或更多次? (即:x.BaseType.BaseType == typeof(Item) 等)

还有,是否可以过滤掉所有的抽象类?

最佳答案

一个简单的方法是使用 IsAssignableFrom .

foreach (var item in Assembly.GetExecutingAssembly().GetTypes()
.Where(x => typeof(Item).IsAssignableFrom(x) && !x.IsAbstract))
{
//Handle each item
}

假设我的“处理每个项目都是一个Console.WriteLine(item),并且我有这样的类结构:

class ItemBase {}
class Item : ItemBase {}
class SuperItem : Item {}
abstract class SuperSuperItem : SuperItem{}
class UltimateItem : SuperSuperItem {}

输出将是:

Item

SuperItem

UltimateItem

请注意,在这种情况下,IsAssignableFrom 本身会返回 true,您可以通过将 && x != typeof(Item) 添加到 Where< 来轻松省略它 子句。

关于c# - 反射(reflection):如何创建一个精确过滤的程序集类型列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31530479/

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