C# 如何获取类内对象的变量名?

C# 如何获取类内对象的变量名?,c#,reflection,C#,Reflection,我有一个类A,它在boobject变量中存储对对象B的引用 public class A { public B BObject; } 我想在B类构造函数中获取boobject(变量名称) 有没有办法做到这一点 这样做的目的:我想要创建ODBCFramework,并且我想要基于变量名获取表名。(与EntityFramework上下文类似) 更新:我想用C#5处理它。你可以用C#6: 请注意,通常尝试使用属性/字段的运行时名称进行表查找似乎不是一个好主意。您可以使用C#-6: 请注意,通常

我有一个类
A
,它在
boobject
变量中存储对对象
B
的引用

public class A
{
    public B BObject;
}
我想在
B
类构造函数中获取
boobject
(变量名称)

有没有办法做到这一点

这样做的目的:我想要创建
ODBCFramework
,并且我想要基于变量名获取表名。(与EntityFramework上下文类似)

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

你可以用C#6:

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

您可以使用C#-6:


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

没有办法执行您想要的操作

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

基本上,这是:

var x = new BObject();
// from inside BObject, get the name "x"
这是不可能的。事实上,您已经将其存储在另一个对象的字段中,这并没有改变任何事情,它根本无法完成


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

没有办法做您想做的事情

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

基本上,这是:

var x = new BObject();
// from inside BObject, get the name "x"
这是不可能的。事实上,您已经将其存储在另一个对象的字段中,这并没有改变任何事情,它根本无法完成

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

您可以使用该类吗

你能用这个班吗


@Damien_不信者给我一些分数来解决我的问题。我试过这个,效果很好

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;
    }
}
另外,要明确回答: @尤瓦尔·伊扎科夫建议,在C#6中,解决方案是:

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

@Damien_不信者给我一些分数来解决我的问题。我试过这个,效果很好

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;
    }
}
另外,要明确回答: @尤瓦尔·伊扎科夫建议,在C#6中,解决方案是:

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

谢谢,但我忘了说我想在C#5中处理它。谢谢,但我忘了说我想在C#5中处理它。调用构造函数时,没有关于结果对象是否存储在任何命名变量中的知识,或者它实际上可能存储在多个变量中。请详细解释您试图解决的问题(提示:该问题存在于比“查找要存储对象的变量名称”更高的级别上”)@Damien_the_unsiver。好的,我有
ODBCContext
课程。我想存储在那里,例如
ODBCSet AR_Customer=new ODBCSet()
在我的ODBCSet中,我想让
AR_customer
(因为它是我的表名)查询这个表并填充我的
DBSet
。如果这是为了模拟EF中的
DbContext
/
DBSet
类,那么你应该知道在
DbContext
对象中发生了神奇的事情,在调用构造函数时,不知道结果对象是否存储在任何命名变量中,也不知道它实际上可能存储在多个变量中。请详细解释您试图解决的问题(提示:该问题存在于比“查找要存储对象的变量名称”更高的级别上”)@Damien_the_unsiver。好的,我有
ODBCContext
课程。我想存储在那里,例如
ODBCSet AR_Customer=new ODBCSet()
在我的ODBCSet中,我想让
AR_customer
(因为它是我的表名)查询这个表并填充我的
DBSet
。如果这是为了模拟EF中的
DbContext
/
DBSet
类,那么你应该知道在
DbContext
对象中发生了神奇的事情,如果我有两个
B
类型的属性,我将如何确定当前创建的属性?这一点很好。我的错误是,这并不能解决您的问题,因为它只提供声明属性的名称。我认为@Lasse的答案是正确的。如果我有两个
B
类型的属性,我将如何确定当前创建的属性?这一点很好。我的错误是,这并不能解决您的问题,因为它只提供声明属性的名称。我认为@Lasse的答案是正确的。