2008-10-09 9 views
1

클래스 F의 개체가 있습니다. Console.WriteLine을 사용하여 개체의 내용을 출력하여 다음과 같은 상태 업데이트를 빠르고 원활하게 수행하고 싶습니다.Console.WriteLine에서 원하는 것을 인쇄하기 위해 어떤 클래스 나 인터페이스를 구현해야합니까?

Console.WriteLine (objectF);

이 콘솔에 클래스의 이름을 출력한다 :

F 

은 내가 대신 개체와 개체의 속성에 대한 유용한 정보를 인쇄 할 수 있도록 어떻게 든이 과부하 싶다.

이미 해결 방법이 있습니다. 내 클래스에서 ToString 메서드를 오버로드 한 다음 호출하십시오. Console.WriteLine (objectF.ToString());

하지만 저는 간단한 구문을 사용하고 싶습니다. 어떤 아이디어?

답변

6

Console.WriteLine (objectF) 당신이 ToString 과부하 경우

이 작동합니다. 프레임 워크가 객체를 문자열 표현으로 변환해야 할 경우 ToString을 호출합니다.

public override string ToString() 
{ 
    // replace the line below with your code 
    return base.ToString(); 
} 
1

나는 toString()를 계속 사용할 것이다. 그것이 기존의 목적입니다. 또한 형식 문자열이 없으면 다음과 같이 쓸 수 있습니다.

Console.WriteLine(objectF) 
1

문제점의 원인을 발견했습니다. 토큰()의 구현을 으로 정의하고 무시한 것은입니다. 올바른 구문은 다음과 같습니다 바른 길에 나를 넣어 자 아래의 포스터에

public override string ToString() 
{ 
    ///Do stuff... 
    return string; 
} 

감사

2

상황에 따라 그냥 유용한 다음 코드를 찾을 수 있지만 당신은 ToString()를 오버라이드 (override) :

public static class ObjectUtility 
{ 
    public static string ToDebug(this object obj) 
    { 
     if (obj == null) 
      return "<null>"; 

     var type = obj.GetType(); 
     var props = type.GetProperties(); 

     var sb = new StringBuilder(props.Length * 20 + type.Name.Length); 
     sb.Append(type.Name); 
     sb.Append("\r\n"); 

     foreach (var property in props) 
     { 
      if (!property.CanRead) 
       continue; 
      // AppendFormat defeats the point 
      sb.Append(property.Name); 
      sb.Append(": "); 
      sb.Append(property.GetValue(obj, null)); 
      sb.Append("\r\n"); 
     } 

     return sb.ToString(); 
    } 
} 

사용은 간단히 ObjectUtility 등을 포함하는 네임 스페이스를 ... 포함하는 것입니다

var f = new F(); 
Console.WriteLine(f.ToDebug()); 
,

위의 리플렉션 사용법은 고성능 코드에는 좋지 않으므로 고성능이 필요한 제작 시나리오에서는 사용하지 마십시오.