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

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/

10-10 17:05