2013-04-10 77 views
1

这里是代码:如何使用.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 ! 

如何获得MinimumPermissionToEdit值,而你不知道指数INT。
我知道它只是名为MinimumPermissionToEdit。

回答

2

您可以使用LINQ来做到这一点。此外,你将不得不使用NamedArguments属性,而不是ConstructorArguments

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

然而,NamedArguments工作,你确实有使用属性时使用的名称。你的更新代码表明你不这样做。

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

+0

早晨丹尼尔:) – Jon 2013-04-10 09:46:00

+0

@Jon:你好! :-)我希望你身边的一切都很好。 – 2013-04-10 09:47:43

+0

这在我的属性中有三个属性时不返回数据。 – 2013-04-10 09:52:09

2

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

+0

这将返回没有数据,而我有三个属性在我的属性。 – 2013-04-10 09:48:38

+1

@Mahdi:向我们展示如何实例化属性。 – Jon 2013-04-10 09:49:17

+0

我已更新我的问题。 – 2013-04-10 09:53:59

相关问题