[英]How to get constructor arguments name in attributes with .NET?
这是代码:
我正在寻找一种通过名称访问参数值的方法。
属性是这样的:
[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 !
如何在不知道index int的情况下获取MinimumPermissionToEdit值。
我知道它只被命名为MinimumPermissionToEdit。
您可以使用LINQ。 此外,您将不得不使用NamedArguments
属性而不是ConstructorArguments
:
NamedArguments.Single(x => x.MemberName == "Name").Value
但是, NamedArguments
工作,您实际上必须在使用该属性时使用这些名称。 您的更新代码显示您不执行此操作。
在这种情况下,无法通过名称获取值。 你只需要使用索引。 与你说的相反,该指数是众所周知的 。 它是构造函数中出现的索引。 MinimumPermissionToEdit
发生在第二个位置,因此其索引为1。
您可以使用NamedArguments
访问它们; CustomAttributeNamedArgument
上的MemberInfo
属性允许您反映将使用命名属性参数设置的成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.