gpt4 book ai didi

c# - 让 AppDomain 中的所有类型都标有特定属性的最有效方法?

转载 作者:行者123 更新时间:2023-11-30 13:12:21 24 4
gpt4 key购买 nike

如果我这样做,我将枚举程序中的所有类型:

List<SerializableAttribute> attributes=new List<SerializableAttribute>() ;
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (Type type in assembly.GetTypes())
{
attributes.AddRange(
type.GetCustomAttributes(false)
.OfType<SerializableAttribute>()
.ToList());
}
}

.NET dll 附带的元数据是否已编制索引以允许我执行以下操作:

List<SerializableAttribute> attributes = typeof(SerializableAttribute)
.GetClassesIAmDefinedOn();

还有其他我没有考虑的选择吗?

(SerializableAttribute只是一个例子)

最佳答案

好吧,更多地使用 LINQ 并至少使用 IsDefined 可以使代码更好(并获取类型,而不是属性...)

var types = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where Attribute.IsDefined(type, typeof(SerializableAttribute))
select type).ToList();

现在,您询问了效率 - 这需要多长时间?需要多长时间才能可接受?你经常打电话吗? (这看起来很奇怪。)

另请注意,它仅包含已加载的程序集 - 可能存在尚未加载的引用程序集;没被捡起来有关系吗?

关于c# - 让 AppDomain 中的所有类型都标有特定属性的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7692781/

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