以下是代码:
我正在寻找一种按名称访问参数值的方法。
属性是这样的:
[AttributeUsage(AttributeTargets.Field)]
public class EDataAttrAttribute : Attribute {
public EDataAttrAttribute(int GroupID, int MinimumPermissionToEdit, bool ForcePersianLetter = false) {
this.GroupID = GroupID;
this.MinimumPermissionToEdit = MinimumPermissionToEdit;
}
public int GroupID { get; private set; }
public int MinimumPermissionToEdit { get; private set; }
}
public class EUser {
[EDataAttr(1, 1)]
public string FirstName;
}
var attr = typeof(T).GetField("FirstName").CustomAttributes.FirstOrDefault(a => a.AttributeType == typeof(EDataAttrAttribute));
int n = attr.ConstructorArguments.Count; // 2 !
int v = attr.NamedArguments.Count; // 0 !
如果您不知道索引int,如何获取MinimumPermissionToEdit值。
我知道它只被命名为MinimumPermissionToEdit。
答案 0 :(得分:2)
您可以使用LINQ。此外,您必须使用NamedArguments
属性而不是ConstructorArguments
:
NamedArguments.Single(x => x.MemberName == "Name").Value
但是,要使NamedArguments
起作用,实际上在使用属性时必须使用这些名称。您的更新代码显示您不这样做。
在这种情况下,无法按名称获取值。你只需要使用索引。与你所说的相反,索引是众所周知的。它是构造函数中出现的索引。 MinimumPermissionToEdit
出现在第二个位置,因此其索引为1。
答案 1 :(得分:2)
您可以使用NamedArguments
来访问这些内容; CustomAttributeNamedArgument
上的MemberInfo
属性允许您反映将使用命名属性参数设置的成员。