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的答案是正确的。