获取不带 "Attribute" 的属性类型名称

Get attribute type name without "Attribute"

typeof(UniqueFieldAttribute).Name returns UniqueFieldAttribute,但我想要 return UniqueField。如果 VS 在装饰 class 元素时可以将属性解析为名称中没有子字符串 Attribute 的实际类型,那么我似乎可以从某些 属性 在类型对象上。

我知道我可以做到这一点...

typeof(UniqueFieldAttribute).Name.Substring(0, typeof(UniqueFieldAttribute).Name.Length - 9)

...但我不想。

不,class 或对象中没有 属性 提供友好的属性名称。这是一个 C# 语言功能。编译器(和 Visual Studio 的 IntelliSense)会按照输入的形式查找 class。如果找到 none,它会追加 "Attribute" 并再次查找。

命名属性 classes 以 "Attribute" 结尾并使用此语言功能是一种惯例。但是,两者都不是必需的。

所以,盲目去掉属性class名称的最后9个字符是错误的。如果最后有 "Attribute" ,你可以去掉它。但是,除非您生成 C# 代码,否则可能会造成混淆,因为每种 .NET 语言都有自己的规范。对于the.NET CLR,以这种方式简化的类型名称不再是相同(或任何)类型的名称。