typeof(UniqueFieldAttribute).Name
返回UniqueFieldAttribute
,但我希望它返回UniqueField
。如果VS可以将属性解析为其实际类型,而在名称中没有子字符串Attribute
,而它正在装饰类元素,似乎我可以从类型对象上的某些属性获得可解析的名称。
我知道我可以做这个…
typeof(UniqueFieldAttribute).Name.Substring(0, typeof(UniqueFieldAttribute).Name.Length - 9)
…但是我不想。
不,没有类或对象的属性提供友好的属性名称。这是c#语言的一个特性。编译器(和Visual Studio的IntelliSense)会根据类的类型查找类。如果没有找到,则追加"Attribute"并再次查找。
将属性类命名为以"attribute"结尾并使用此语言特性是一种惯例。但是,两者都不是必需的。
因此,盲目地去掉属性类名的最后9个字符是错误的。如果"Attribute"出现在末尾,你可以去掉它。然而,除非你正在生成c#代码,否则它可能会令人困惑,因为每种。net语言都有自己的规范。. NET CLR中,以这种方式简化的类型名称不再是相同(或任何)类型的名称。