C# 11增加了对所需属性的支持。
public class Example
{
public required string Value { get; set; }
}如何检测该属性是根据反射的要求声明的?
请注意,这是一个与返回类中所有必需属性的列表。不同的问题,因为这个问题从2017年起是关于自定义属性的,这是关于required属性关键字的,这是C# 11 (2022年)中新出现的。
PropertyInfo prop = typeof(Example).GetProperty("Value");
//bool isRequired = prop ...?发布于 2022-11-09 08:11:35
如果我们使用通过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()
{
}
}所以..。只需通过RequiredMemberAttribute测试属性上是否存在Attribute.IsDefined(propertyInfo, typeof(RequiredMemberAttribute))。我想您也应该在类型上测试RequiredMemberAttribute。
https://stackoverflow.com/questions/74371619
复制相似问题