출력 창을 사용하여 개체의 모든 구성원을 쓰려면 어떻게해야합니까? Trace.WriteLine은 ToString 메서드를 사용하며 모든 멤버를 출력하지 않습니다. 자체 코드를 작성하지 않고 API를 사용할 수 있습니까?Visual Studio의 직접 실행 창은 개체의 모든 구성원을 어떻게 인쇄합니까?
1
A
답변
2
아마도 리플렉션을 통해 회원들을 반복 할 것입니다.
0
특정 개체의 ToString() 메서드가 호출되면 해당 메서드가 모든 멤버를 표시하도록 재정의 된 경우 정상입니다. 그러나 모든 객체가 ToString() 메소드를 구현하지는 않습니다.이 경우 메소드는 객체 유형 정보를 반환합니다.
ToString()을 호출하는 대신 reflection to enumerate the object members을 사용하는 사용자 지정 함수를 작성하고이를 출력하십시오.
편집 :이 함수는 주어진 객체의 속성을 반환하고 필요한 모든 메서드, 이벤트를 추가합니다.
Function ListMembers(ByVal target As Object) As String
Dim targetType As Type = target.GetType
Dim props() As Reflection.PropertyInfo = targetType.GetProperties
Dim sb As New System.Text.StringBuilder
For Each prop As Reflection.PropertyInfo In props
sb.AppendLine(String.Format("{0} is a {1}", prop.Name, prop.PropertyType.FullName))
Next
Return sb.ToString
End Function
4
당신은 같은 것을 할 수 있습니다 (이 VB,이 작품의 PC에 아무런 C#으로의) :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var m = new MyClass { AString = "somestring", AnInt = 60 };
Console.WriteLine(GetObjectInfo(m));
Console.ReadLine();
}
private static string GetObjectInfo(object o)
{
var result = new StringBuilder();
var t = o.GetType();
result.AppendFormat("Type: {0}\n", t.Name);
t.GetProperties().ToList().ForEach(pi => result.AppendFormat("{0} = {1}\n", pi.Name, pi.GetValue(o, null).ToString()));
return result.ToString();
}
}
public class MyClass
{
public string AString { get; set; }
public int AnInt { get; set; }
}
}
+0
감사. API를 찾지 못하면 코드를 사용하게 될 것입니다. – alga
아니, 아니. 클래스, 내가 출력하려고하는 것은 ToString을 재정의하지 않았기 때문에 쓰지 않으려 고합니다. 그러나 직접 창은 어떻게 든 모든 것을 인쇄합니다. 그 마법 방법을 찾고 있어요. – alga
마법의 방법은 없습니다. VS는 리플렉션을 통해 멤버를 호출하거나 평가하는 중입니다. –
얀 (Yann)의 말; VS는 프레임 워크의 리플렉션을 사용하며 동일한 작업을 수행 할 수 있습니다. 코드 편집을 참조하십시오. – invert