2009-12-09 3 views
0

가능한 중복 : 어떤 개체의 이름을 인쇄 할 수있는 방법
print name of the variable in c#뜨거운 개체의 이름을 얻을?

MyClass c1, c2; 

printName(c1); 
printName(c2); 

void printName(Object o) 
{ 
    Console.WriteLine("name of object : "+ o.???()); 
} 

출력은 다음과 같이해야합니다 :

name of object : c1 
name of object : c2 

이 특정입니다 .Net에,하지만 다른 p에 대한 답변 latform/언어가 도움이 될 수 있습니다.

+1

복제를 http://stackoverflow.com/questions/729803/print-name-of-the-variable-in-c의 –

+0

객체를 다음과 같이

class MyClass { public string Name {get;set;} // rest of class goes here // ... } 

당신은 그것을 사용할 수 있습니다 이름이 없어. 변수는 이름을 가지며 변수는 객체에 _references_를 보유합니다. 또한 두 개의 변수 (이름이 다를 수 있음)가 동일한 객체를 참조 할 수 있습니다. –

+0

구체적으로 어떤 언어를 사용합니까? 나는 VB.NET을 만들려고 노력했다. 아무런 운이 없다. – Moshe

답변

-1

그건 불가능합니다.
변수의 이름은 개발자 (컴파일러 또는 런타임이 아님)에게만 중요합니다.

Dictionary<string, object> &과 같은 이름을 가진 인스턴스를 변수 이름과 함께 추가하여 만들 수 있습니다.

편집 : 그 이유는 컴파일러를 이해하고 우연히 사람들이 이해할 수있는 코드를 작성한다는 것입니다.

+1

언제나처럼, downvoting을 설명해 주어야한다. – shahkalpesh

+0

응? 그래서이 'Dictionary '를 가지고 있습니다. 그리고이 변수들은'string s = "Hello, world!"'및'string t = s'와 같이 선언 된's'와't' 변수를가집니다. 그리고이 사전에'("s", "Hello, World!")'와'("t", "Hello, World!")를 넣었을 것입니다. 그리고 이제는'printName (s) '을 통해 호출 된'printName' 메쏘드에 들어 있습니다. 그렇다면이 사전을 사용하여''s "'을 어떻게 찾을 수 있습니까? 그리고 내가 ""t "'을 발견해서는 안된다는 것을 어떻게 알 수 있습니까? – jason

+0

@ Jason : 당신 말이 맞아요. 인스턴스가 2 개의 변수로 참조되는 시나리오는 실패합니다. 나는 제공된 OP 코드를보고 대답했다. 'Dictionary '를 넣는 것은 잘못입니다. 'Dictionary '일 수 있습니다. 따라서 객체 인스턴스를 키로 변수의 이름을 값으로 지정할 수 있습니다. 유일한 조건은 객체가 이미 사전에 추가되어서는 안된다는 것입니다. – shahkalpesh

1

이름이 소스 코드 외부에 존재하지 않습니다. 이렇게하려면 디버거로 자신을 붙이거나 PDB를 파헤쳐야합니다. 간단히 말해서, C# 및 다른 대부분의 언어에 대해서는 아무리해도 실용적이지 않습니다.

0

이것은 불가능합니다.

이 결과는 무엇입니까? st 모두로서

string s = "Hello, world!"; 
string t = s; 
printName(t); 

파라미터로서 t 대 파라미터로서 sprintName으로의 호출을 구별 할 수있는 방법이 없기 string의 동일한 인스턴스를 참조.

그리고이 결과는 어떻게되어야합니까?

printName("Hello, world!"); 
+0

@ 제이슨 : 위의 의견에 대한 내 대답을 참조하십시오. 나는 희망을 말하고있다 : – shahkalpesh

0

이론적으로는 불가능하다고 생각합니다. 이 시나리오에 대한 생각 :

MyClass a, b; 
a = new MyClass(); 
b = a; 

Console.WriteLine("name of b is " + SomeMagicClass.GetVarName(b)); 
//Should it be "b" or "a"? 

심지어 런타임에 존재하지 변수 이름의 라인을 따라 생성에 관한 코드를 포함하는 더 나은 설명이 확신합니다.

편집 아아, 틀렸어. Jon Skeet의 Null 참조 예외 처리에 대한 post에서 영감을 받아 갑자기 프로젝션에 대해 상기시켜주는 방법이 있습니다.

여기에 전체 작업 codez입니다 : 자체 메모리에 있고 이름이없는

목적 : 다음과 같은 이유로 이해가되지 않습니다

public static class ObjectExtensions { 
    public static string GetVariableName<T>(this T obj) { 
     System.Reflection.PropertyInfo[] objGetTypeGetProperties = obj.GetType().GetProperties(); 

     if(objGetTypeGetProperties.Length == 1) 
      return objGetTypeGetProperties[0].Name; 
     else 
      throw new ArgumentException("object must contain one property"); 
    } 
} 

class Program { 
    static void Main(string[] args) { 
     string strName = "sdsd"; 
     Console.WriteLine(new {strName}.GetVariableName()); 

     int intName = 2343; 
     Console.WriteLine(new { intName }.GetVariableName()); 
    } 
} 
0

. 이름이있는 참조를 사용하여 액세스하고 있습니다.

MyClass c1, c2; 
c1 = new MyClass(); 
c2 = c1; 
printName(c1); 
printName(c2); 

당신이 볼 수 있듯이, 모두 C1 및 C2 : 따라서, 참조 이름이 고려, 당신은 등, 같은 이름없는 개체에

"을 가리키는"50 참조를 가질 수있는 순간에 변경할 수 있습니다 누가 그것을 참조하고 있는지 또는 어떤 이름으로 "알지"못하는 정확한 동일한 객체에 대한 참조입니다.

-1

MyClass 클래스 내에 Name 속성을 배치해야합니다.

var c1 = new MyClass() { Name = "c1" }; 
var c2 = new MyClass() { Name = "c2" }; 

printName(c1); 
printName(c2); 

void printName(MyClass o) 
{ 
    Console.WriteLine("name of object : "+ o.Name); 
} 
+0

'printName'에 전달 된 객체가'Name' 속성을 가지고 있지 않다면 이것은 작동하지 않습니다. – jason

+0

printName을 올바르게 읽으면 이름이있는 MyClass 객체가 필요함을 알 수 있습니다. – Will

+0

귀하의 선행은 정확하지만 결과는 틀립니다. 여기 :'void printName (Object o)'. 그는 또한 "[h] ow는 어떤 객체 [?]의 이름도 인쇄 할 수 있다고 말합니다. – jason

관련 문제