如何获得类内对象的变量名

本文关键字:变量名 对象 何获得 | 更新日期: 2023-09-27 18:12:51

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

public class A
{
    public B BObject;
}

我想在B类构造器中获得BObject(变量名)。

有办法吗?

这样做的目的:我想创建ODBCFramework,我想根据变量名获得表名。(如在EntityFramework Context中)

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

如何获得类内对象的变量名

您可以使用c# -6 nameof操作符:

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

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

没有办法做你想做的。

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

基本上是这样的:

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

是不可能的。您将它存储在另一个对象的字段中,这一事实并没有改变什么,它根本不能这样做。

你需要有一种方法显式地告诉对象它应该使用哪个表名

可以使用PropertyInfo类吗?

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

@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);