【问题标题】:Accessing Class and Property name inside an Attribute访问属性中的类和属性名称
【发布时间】:2011-10-15 13:58:53
【问题描述】:

有什么方法可以访问您在属性中附加属性的类和属性名称?

例如

public class User {
    public string Email { get; set; }
    public string FirstName { get; set; }

    [MyAttribute]
    public string LastName { get; set; }
}

然后在 MyAttribute 类中

public class MyAttributeAttribute {
    public MyAttributeAttribute () : base() {
        string className = /*GET CLASS NAME - should return "User" */
        string propertyName = /*GET PROPERTY NAME - should return LastName*/
    }
}

我知道我可以在构造函数中传递信息,但希望有一种简单的方法可以通过反射或...

【问题讨论】:

    标签: c# reflection custom-attributes


    【解决方案1】:

    抱歉,不,那是不可能的。你也可以有

    public class User {
        public string Email { get; set; }
        public string FirstName { get; set; }
    
        [MyAttrubute]
        public string LastName { get; set; }
    }
    
    [MyAttrubute]
    public class OtherClass {
    
        [MyAttrubute]
        public string AnotherProperty { get; set; }
    }
    

    属性可以从任何地方创建。甚至以下是创建实例的有效方法:

    var att = new MyAttribute();
    

    您的问题可以归结为“我可以检测到我的自定义类是从哪里实例化的吗?”。在我的最后一个例子中,StackTrace 可能会被使用。但是对于属性,它们是由 .NET 运行时构建的,因此您将无法走这条路。

    【讨论】:

    • 不确定我是否遵循您的推理(尽管总体答案可能仍然相同)。每个属性都是它自己的 MyAttribute 类实例,因此每个属性都可以在其构造函数中获取不同的值并将其存储在本地。它可以装饰多个属性的事实不能成为我无法获取装饰类/属性的原因。我认为可能有一种方法可以在运行时确定该属性实例附加的类/属性
    • @Peter - 对不起,我澄清了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多