我有一个类A
,它将ref存储在B
变量中的对象BObject
。
public class A
{
public B BObject;
}
我想在BObject
类构造函数中获取B
(变量名称)。
有没有办法做到这一点?
这样做的目的:我想创建ODBCFramework
,我想根据变量名称获取表名。 (就像在EntityFramework上下文中一样)
更新:我想在C#5中处理它。
答案 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)
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);