gpt4 book ai didi

c# - C# 属性是否可以没有 GetMethod 和 SetMethod

转载 作者:太空狗 更新时间:2023-10-30 00:30:18 26 4
gpt4 key购买 nike

浏览 System.Linq.Expressions 的 .NET 核心源代码,我发现以下代码位于 here :

MethodInfo mi = property.GetGetMethod(true);
if (mi == null)
{
mi = property.GetSetMethod(true);
if (mi == null)
{
throw Error.PropertyDoesNotHaveAccessor(property, nameof(property));
}
}

GetGetMethod GetSetMethod 有什么方法可以同时返回 null,正如此处似乎说明的那样?这是死代码吗?C# 编译器不允许属性没有 getter 和 setter,所以对于 PropertyInfo 这怎么可能。

我的动机是通过添加测试覆盖来为 OSS 代码做出贡献,所以我想看看哪些测试用例会覆盖这个

最佳答案

您可以在 IL 中创建一个没有访问器的属性:

.class public C
{
.property int32 Count() { }
}

然后可以触发您提到的代码路径:

var prop = typeof(C).GetProperty("Count", BindingFlags.NonPublic | BindingFlags.Instance);

Expression.Property(null, prop);

这段代码抛出:

ArgumentException: The property 'Int32 Count' has no 'get' or 'set' accessors

关于c# - C# 属性是否可以没有 GetMethod 和 SetMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com