从.NET中的属性读取

时间:2013-12-09 08:39:52

标签: c# .net

在所有自定义属性的教程中,他们教我们如何创建和定义自定义属性,这只不过是关于类/方法的简单注释。 我试图找出如何在某些方法中从.NET中的那些自定义属性中读取。 例如:

[SomeCustomAttr(param1, param2)]
public void Method1()
{
   read param1 from here
   read param2 from here
}

有很棒的框架可以处理输入的数据。有没有人可以给我一些方向来解决这个问题?

2 个答案:

答案 0 :(得分:4)

假设您引用的参数是自定义属性类的属性:

class Program
{
    static void Main(string[] args) {
        Test();
        Console.Read();
    }

    [Custom(Foo = "yup", Bar = 42)]
    static void Test() {
        // Get the MethodBase for this method
        var thismethod = MethodBase.GetCurrentMethod();

        // Get all of the attributes that derive from CustomAttribute
        var attrs = thismethod.GetCustomAttributes(typeof(CustomAttribute), true);

        // Assume that there is just one of these attributes
        var attr1 = (CustomAttribute)attrs.Single();

        // Print the two properties of the attribute
        Console.WriteLine("Foo = {0},  Bar = {1}", attr1.Foo, attr1.Bar);
    }
}

class CustomAttribute : Attribute
{
    public string Foo { get; set; }
    public int Bar { get; set; }
}

请注意,属性有点特殊,因为它们可以使用命名参数(对应于公共属性名称),而无需声明任何构造函数。

答案 1 :(得分:0)

反射是获取属性的正确方法。

            var TypeObj = typeof(Type1);
            var MethodInfoObj = TypeObj.GetMethod("Method1");

           // var AllAttributes= MethodInfoObj.GetCustomAttributes(true);

            var Attributes = MethodInfoObj.GetCustomAttributes(typeof(SomeCustomAttr), true);
            if (Attributes.Length > 0)
            {
                var AttributeObj = Attributes[0] as SomeCustomAttr;
                var value_param1  = AttributeObj.param1 ;
            }