从记录中获取属性
Get attribute from record
我正在寻找一种方法来获取在记录构造函数“字段”上定义的属性。
// See https://aka.ms/new-console-template for more information
using System.ComponentModel.DataAnnotations;
var property = typeof(TestRecord)
.GetProperties()
.First( x => x.Name == nameof(TestRecord.FirstName) );
var attr0 = property.Attributes; // NONE
var attr1 = property.GetCustomAttributes( typeof(DisplayAttribute), true ); // empty
var property1 = typeof(TestRecord)
.GetProperties()
.First( x => x.Name == nameof(TestRecord.LastName) );
var attr2 = property1.Attributes; // NONE
var attr3 = property1.GetCustomAttributes( typeof(DisplayAttribute), true ); // Works
public sealed record TestRecord( [Display] String FirstName, [property: Display] String LastName );
我能够在 LastName
上获取针对 属性 的属性(使用 property:
)。
但我找不到检索 FirstName
属性的方法。
我确定有一种方法可以读取属性数据...至少 ASP.NET 能够读取验证并显示指定的属性,而无需针对 属性(property:
).
您看错地方了:在 C# 中使用“braceless”record
语法时,成员的属性实际上是 参数属性.
您可以像这样从 [Display] String FirstName
获取 DisplayAttribute
:
ParameterInfo[] ctorParams = typeof(TestRecord)
.GetConstructors()
.Single()
.GetParameters();
DisplayAttribute firstNameDisplayAttrib = ctorParams
.Single( p => p.Name == "FirstName" )
.GetCustomAttributes()
.OfType<DisplayAttribute>()
.Single();
我正在寻找一种方法来获取在记录构造函数“字段”上定义的属性。
// See https://aka.ms/new-console-template for more information
using System.ComponentModel.DataAnnotations;
var property = typeof(TestRecord)
.GetProperties()
.First( x => x.Name == nameof(TestRecord.FirstName) );
var attr0 = property.Attributes; // NONE
var attr1 = property.GetCustomAttributes( typeof(DisplayAttribute), true ); // empty
var property1 = typeof(TestRecord)
.GetProperties()
.First( x => x.Name == nameof(TestRecord.LastName) );
var attr2 = property1.Attributes; // NONE
var attr3 = property1.GetCustomAttributes( typeof(DisplayAttribute), true ); // Works
public sealed record TestRecord( [Display] String FirstName, [property: Display] String LastName );
我能够在 LastName
上获取针对 属性 的属性(使用 property:
)。
但我找不到检索 FirstName
属性的方法。
我确定有一种方法可以读取属性数据...至少 ASP.NET 能够读取验证并显示指定的属性,而无需针对 属性(property:
).
您看错地方了:在 C# 中使用“braceless”record
语法时,成员的属性实际上是 参数属性.
您可以像这样从 [Display] String FirstName
获取 DisplayAttribute
:
ParameterInfo[] ctorParams = typeof(TestRecord)
.GetConstructors()
.Single()
.GetParameters();
DisplayAttribute firstNameDisplayAttrib = ctorParams
.Single( p => p.Name == "FirstName" )
.GetCustomAttributes()
.OfType<DisplayAttribute>()
.Single();