gpt4 book ai didi

c# - 通过反射检查时缺少 NotNullAttribute

转载 作者:行者123 更新时间:2023-12-05 02:32:50 25 4
gpt4 key购买 nike

我们要做的是列出具有 NotNull 属性的类的所有属性。一个来自 .NET,而不是 JetBrains。不幸的是,看起来 NotNullAttribute 在编译过程中(或在其他某个阶段)被删除,并且无法在运行时观察到。

有谁知道为什么会这样?在互联网/MSDN 上找不到解释。

这是一个可以轻松重现它的测试。它在第二个断言上失败。

public class Tests
{
public class Foo
{
[NotNull, Required] public string? Bar { get; set; }
}

[Test]
public void GetAttributesTest()
{
var type = typeof(Foo);
var property = type.GetProperties()[0];

Attribute.IsDefined(property, typeof(RequiredAttribute)).Should().BeTrue();
Attribute.IsDefined(property, typeof(NotNullAttribute)).Should().BeTrue();
}
}

最佳答案

如果您使用 SharpLab您可以在降低的代码中看到该属性确实已从属性中删除,而是应用于返回参数:

public string Bar
{
[CompilerGenerated]
[return: NotNull] // Note the "return" target
get
{
return <Bar>k__BackingField;
}
//snip
}

所以如果你想获得NotNull属性,你需要更深入地研究结构。例如:

var type = typeof(Foo);
var property = type.GetProperties()[0];
var getMethod = property.GetGetMethod()!;
var returnParameter = getMethod.ReturnParameter;

Attribute.IsDefined(returnParameter, typeof(NotNullAttribute)).Should().BeTrue();

关于c# - 通过反射检查时缺少 NotNullAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71144165/

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