繁体   English   中英

如何使用.NET获取属性中的构造函数参数名称?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM