1

这是代码:

我正在寻找一种按名称访问参数值的方法。

属性是这样的:

[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。

4

2 回答 2

2

你可以NamedArguments用来访问那些;MemberInfoon 属性CustomAttributeNamedArgument允许您反映将使用命名属性参数设置的成员。

于 2013-04-10T09:42:47.433 回答
2

您可以为此使用 LINQ。此外,您将不得不使用该NamedArguments属性而不是ConstructorArguments

NamedArguments.Single(x => x.MemberName == "Name").Value

但是,为了NamedArguments工作,您实际上必须在使用属性时使用名称。您更新的代码表明您没有这样做。

在这种情况下,无法通过名称获取值。你只需要使用索引。与您所说的相反,该指数是众所周知的。它是它出现在构造函数中的索引。MinimumPermissionToEdit出现在第二个位置,所以它的索引是 1。

于 2013-04-10T09:42:02.577 回答