Вы не можете, потому что нет такого «имени» для объекта. Это даже не имеет смысла - многие переменные могут содержать ссылку на один и тот же объект. Какое из них должно быть "имя"?
Представьте на мгновение, что будет такая функция с именем GetName (). Что выдаст программа в каждом из этих случаев?
Дело 1:
var a = new MyObject();
var b = a;
Console.WriteLine(GetName(b)); // Is it "a" or "b"?
Дело 2:
Console.WriteLine(GetName(new MyObject())); // What is the name now?
Дело 3:
Console.WriteLine(GetName(null)); // I guess you can return null here, but see case 4:
Дело 4:
MyObject a = null;
Console.WriteLine(GetName(a)); // Should this be "a" or null?
И так далее, и тому подобное.
Если вы хотите дать вашим объектам «имена», вам придется сделать это самостоятельно. Возможно, создайте класс-оболочку «NamedObject» следующим образом:
class NamedObject<T>
{
public readonly T Object;
public readonly string Name;
public NamedObject(string name, string value)
{
this.Object = value;
this.Name = name;
}
}