如何在类中获取对象的变量名?

时间:2015-09-16 07:16:04

标签: c# reflection

我有一个类A,它将ref存储在B变量中的对象BObject

public class A
{
    public B BObject;
}

我想在BObject类构造函数中获取B(变量名称)。

有没有办法做到这一点?

这样做的目的:我想创建ODBCFramework,我想根据变量名称获取表名。 (就像在EntityFramework上下文中一样)

更新:我想在C#5中处理它。

4 个答案:

答案 0 :(得分:5)

您可以使用C#-6 nameof operator

var a = new A();
string bName = nameof(a.B);

请注意,通常尝试在属性/字段的运行时名称中继以进行表查找似乎是一个坏主意。

答案 1 :(得分:2)

没有办法做你想做的事。

您无法找到存储对象引用的名称,该信息根本不可用。

基本上,这个:

var x = new BObject();
// from inside BObject, get the name "x"

是不可能的。你将它存储在另一个对象的字段中这一事实没有改变,它根本无法完成。

您需要有一种方法明确告诉该对象应该使用哪个表名。

答案 2 :(得分:1)

您可以使用PropertyInfo类吗?

var a = B.GetInfo().GetProperties();
foreach(PropertyInfo propertyInfo in a)
    string name = propertyInfo.Name

答案 3 :(得分:1)

@Damien_The_Unbeliever给我一些解决我问题的要点。我试过这个,它确实有效。

public class A
{
    public B BObject { get; set; }
    public A()
    {
        var BTypeProperties = this.GetType().GetProperties().Where(x => x.PropertyType == typeof(B));
        foreach (var prop in BTypeProperties)
        {
            prop.SetValue(this, new B(prop.Name));
        }
    }

}

public class B
{
    string _propName;
    public B(string propertyName)
    {
        _propName = propertyName;
    }
}

另外,要明确回答: @Yuval Itzchakov建议在C#6解决方案是:

var a = new A();
string bName = nameof(a.B);