gpt4 book ai didi

C# 11 - 通过反射检测所需的属性

转载 作者:行者123 更新时间:2023-12-05 01:49:13 25 4
gpt4 key购买 nike

C# 11 添加了对必需属性的支持。

public class Example
{
public required string Value { get; set; }
}

我如何检测该属性是否按反射要求声明?

请注意,这是与 Return a list of all required properties in a class 不同的问题因为这个问题是 2017 年关于自定义属性的问题,所以这是关于 C# 11 (2022) 中新增的 required 属性关键字。

PropertyInfo prop = typeof(Example).GetProperty("Value");
//bool isRequired = prop ...?

最佳答案

如果我们 run your code through sharplab ,我们看到您的代码变为:

[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
[RequiredMember]
public class Example
{
[CompilerGenerated]
private string <Value>k__BackingField;

[RequiredMember]
public string Value
{
[CompilerGenerated]
get
{
return <Value>k__BackingField;
}
[CompilerGenerated]
set
{
<Value>k__BackingField = value;
}
}

[Obsolete("Constructors of types with required members are not supported in this version of your compiler.", true)]
[CompilerFeatureRequired("RequiredMembers")]
public Example()
{
}
}

所以...只需通过 Attribute.IsDefined(propertyInfo, typeof(RequiredMemberAttribute)) 测试属性上是否存在 RequiredMemberAttribute。我猜你也应该在类型上测试 RequiredMemberAttribute

关于C# 11 - 通过反射检测所需的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74371619/

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