【发布时间】:2021-03-25 15:27:18
【问题描述】:
我尝试通过反射 API 获取 dotnet 记录属性的 自定义属性 失败!我使用自定义属性注释了属性,但正如我在 ILDASM 中看到的那样,没有属性、字段和方法成员都没有该 自定义属性。那么,编译器对该注解做了什么?
只需尝试dotnet new classlib,然后在文件夹中创建DummyAttribute如:
public class DummyAttribute : System.Attribute {}
然后将Class1替换为:
public record Class1([Dummy] string Name){}
最后,使用dotnet build 构建它,并在ILDASM 中检查生成的dll。属性Name 缺少DummyAttribute,如下所示:
.property instance string Name()
{
.get instance string app10_records_annotations.Class1::get_Name()
.set instance void modreq([System.Runtime]System.Runtime.CompilerServices.IsExternalInit) app10_records_annotations.Class1::set_Name(string)
} // end of property Class1::Name
该注释发生了什么?我们可以注释 dotnet 记录的属性吗?
【问题讨论】:
-
感谢@Damien_The_Unbeliever。警告或编译错误会很好。 Dotnet 文档甚至没有提到这种行为。简单地忽略注释不是一个很好的功能!
-
@MiguelGamboa:它不会被忽略 - 它最终会出现在构造函数参数上。