H B*_*amy 5 c# reflection propertyinfo linq-expressions
浏览 System.Linq.Expressions 的 .NET 核心源代码,我发现以下代码位于此处:
MethodInfo mi = property.GetGetMethod(true);
if (mi == null)
{
mi = property.GetSetMethod(true);
if (mi == null)
{
throw Error.PropertyDoesNotHaveAccessor(property, nameof(property));
}
}
Run Code Online (Sandbox Code Playgroud)
有没有什么办法GetGetMethod
和 GetSetMethod
既可以返回null,因为似乎占了这里?这是死代码吗?C# 编译器不允许属性没有 getter 和 setter,所以这对PropertyInfo
.
我的动机是通过添加测试覆盖率来为 OSS 代码做出贡献,所以我想看看哪些测试用例会覆盖这个
根据CLI 规范,
\n\n\n\n\nCLS 规则 28:属性应遵循特定的命名模式。请参阅\n \xc2\xa7I.10.4。CLS 规则 24 中引用的 SpecialName 属性在适当的名称比较中应被忽略,并应遵守标识符规则。属性应具有 getter 方法、setter 方法或两者。
\n
这是链接 PDF 的第 52 页。
\n\n这似乎是说,其中之一必定存在。
\n\n看来开发人员决定以这种方式解释规范,并在面对无效数据时采取相应的行动。看起来这是一件很合理的事情。
\n\n通过编写 IL 或随后编辑元数据,有可能创建一个没有 getter 或 setter 的属性。.NET 加载程序可能会继续加载它,即使它被视为无效属性。我在其他领域也看到过类似的事情发生。
\n\n考虑到这一点,处理既没有 getter 也没有 setter 的属性的“不可能”情况的代码对我来说似乎并不是死代码。
\n