如果我这样做,我将枚举程序中的所有类型:
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 只是一个例子)
最佳答案
这里使用的最有效的东西通常是 Attribute.IsDefined(...)
,尽管在 [Serializable]
的特定情况下, type.IsSerializable
更快(在这种情况下它实际上并不作为属性存储 - 它在编译器中有特殊处理,映射到 CLI 标志)。
关于c# - 获取 AppDomain 中所有类型标记为特定属性的最有效方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7692781/