Как получить имя объекта, используя отражение в .net? - PullRequest
4 голосов
/ 31 октября 2009

В .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;}
}

Ответы [ 3 ]

4 голосов
/ 31 октября 2009

Что касается CLR, на самом деле нет способа определить имя объекта. Такая информация хранится (до некоторой степени) в отладочной информации и сборке, но не используется во время выполнения. В любом случае, объект, на который вы ссылаетесь, - это просто куча байтов в памяти. Он может иметь несколько ссылок на него с несколькими именами, поэтому, даже если вы сможете получить имена всех переменных, ссылающихся на объект, будет невозможно программно определить, какую из них вы хотите использовать.

Короче говоря: вы не можете этого сделать.

3 голосов
/ 31 октября 2009

Это имя переменной , а не имя объекта. Здесь также возникает вопрос: как зовут здесь:

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

Обратите внимание, что это зависит от реализации захвата и т. Д. - и, как правило, нахально.

1 голос
/ 31 октября 2009

Я не думаю, что это возможно.

Но, во-первых, зачем вам что-то подобное ??

По своему опыту я понял, что если вам нужно что-то странное из компилятора или языка, который не предлагается, то (чаще всего) это означает, что что-то не так с подходом или логикой.

Пожалуйста, пересмотрите, почему вы пытаетесь достичь этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...