测试类型是否为属性

本文关键字:属性 是否 类型 测试类 测试 | 更新日期: 2023-09-27 18:23:40

我得到了以下代码:

var library = Assembly.LoadFrom(libraryPath);
var namespaces = library.GetTypes().GroupBy(t => t.Namespace);
foreach (var typesInNamespace in namespaces)
{
    foreach (var type in typesInNamespace)
    {
        [...]
    }
}

但是,当我想测试当前类型是否是具有以下代码的属性时:

var attributes = typesInNamespace.Where(t => t is System.Attribute);

if (type is System.Attribute)

它们都失败了,我有以下警告:

The given expression is never of the provided ('System.Attribute') type

类的定义如下:

class ImportableModelAttribute : Attribute
{
}
class ImportableAttribute : Attribute
{
}

老实说,我希望有一种API来处理Attributes(类似于if (type.IsAtteribute)),但我什么也没找到,这就是我尝试用这种方式的原因!

测试类型是否为属性

Type本身从来都不是属性(就像typeof(string)不是字符串一样),但我怀疑您想要:

if (typeof(Attribute).IsAssignableFrom(type))

(当然,也可以把它放在lambda表达式中。)

有关详细信息,请参阅Type.IsAssignableFrom的文档。