在.net中如何在声明类型中获取对象的名称。例如......
public static void Main()
{
Information dataInformation = new Information();
}
public class Inforamtion
{
//Constructor
public Inforamtion()
{
//Can I fetch name of object i.e. "dataInformation" declared in Main function
//I want to set the object's Name property = dataInformation here, because it is the name used in declaring that object.
}
public string Name = {get; set;}
}
答案 0 :(得分:4)
就CLR而言,确实没有办法确定对象的名称。这种信息(在某种程度上)存储在调试信息和程序集中,但它不会在运行时使用。无论如何,你所指的对象只是内存中的一堆字节。它可能有多个名称的多个引用,所以即使您可以获取引用该对象的所有变量的名称,也不可能以编程方式确定您要使用哪个变量。
长话短说:你做不到。
答案 1 :(得分:3)
这是变量名称,而不是对象名称。它还提出了一个问题:这里的名称是什么:
Information foo, bar;
foo = bar = new Information();
你不能为构造函数等做这个;在有限方案中,如果您真的需要,可以通过Expression
获取变量名称:
public static void Main()
{
Information dataInformation = new Information();
Write(() => dataInformation);
}
static void Write<T>(Expression<Func<T>> expression)
{
MemberExpression me = expression.Body as MemberExpression;
if (me == null) throw new NotSupportedException();
Console.WriteLine(me.Member.Name);
}
请注意,这取决于捕获实现等 - 通常是厚颜无耻。
答案 2 :(得分:1)
我认为这不可能。
但首先,你为什么需要这样的东西?
根据我的经验,我已经意识到,如果你需要一些奇怪的编译器或一种没有提供的语言,那么(大多数情况下)它意味着这种方法或逻辑有问题。
请重新考虑为什么要尝试实现这一目标。