作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我是一名优秀的程序员,十分优秀!