在属性内获取类和属性名称

8

有没有办法在属性内部访问您附加属性的类名和属性名?

例如:

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*/
    }
}

我知道我可以在构造函数中传递信息,但希望有一种简单的方法可以通过反射或其他方式节省重复输入信息的时间...

1个回答

7
很抱歉,这是不可能的。你也可以这样做。
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运行时构造的,因此您将无法按照这种方式进行。


1
不确定我是否理解你的推理(尽管总体答案可能仍然相同)。每个属性都是 MyAttribute 类的自己实例,因此每个属性可以在其构造函数中输入不同的值并在本地存储它。它可以装饰多个属性的事实不能成为我无法获取装饰类/属性的原因。我认为在运行时可能有一种方法来确定该属性实例附加了哪个类/属性。 - Peter
@Peter - 对不起,我澄清了我的回答。 - CodeNaked

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接