获取不带 "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,以这种方式简化的类型名称不再是相同(或任何)类型的名称。
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,以这种方式简化的类型名称不再是相同(或任何)类型的名称。