Как я могу использовать окно вывода написать все члены объекта? Trace.WriteLine использует метод ToString и не выводит всех членов. Есть ли API для этого, не написав собственный код?Как непосредственно окно визуальной студии печатает все элементы объекта?
ответ
Это, вероятно, итерация через элементы через отражение.
Метод ToString() для конкретного объекта вызывается, и если этот метод был переопределен для отображения всех членов, то он отлично. Однако не все объекты имеют свои методы ToString(), и в этом случае метод возвращает информацию типа объекта.
Вместо вызова ToString() напишите пользовательскую функцию, которая использует reflection to enumerate the object members, и выведите это.
Редактировать: Эта функция возвращает свойства данного объекта, добавляет методы, события, все, что вам нужно. (Это в VB, C# не на этой работе ПК)
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
Вы можете сделать что-то вроде этого:
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; }
}
}
Спасибо. Если я не найду API, я, вероятно, воспользуюсь вашим кодом. – alga
- 1. Как получить окно в визуальной студии, имеющее все прототипы класса
- 2. Как вы перемещаете окно визуальной студии DataTip
- 3. Как переключить фокус непосредственно на стыковочные окна в визуальной студии?
- 4. отключить всплывающее окно ошибки в визуальной студии
- 5. Имитация свойств Окно визуальной студии в winform
- 6. Ошибка визуальной студии и объекта экземпляра
- 7. «Выбрать элементы элементов» в визуальной студии не загружается
- 8. свойство визуальной студии отсутствует персонажи
- 9. Редактировать все страницы визуальной студии одновременно
- 10. Как удалить всплывающее окно визуальной студии «Выбор ожидания запроса ...»
- 11. Как развернуть инструмент визуальной студии?
- 12. ArrayList не печатает все элементы
- 13. Как войти в win32 C++ в окно вывода визуальной студии?
- 14. Как добавить прикрепляемое окно в визуальной студии 2008
- 15. Как сотрудничать на визуальной студии
- 16. О отладочном интерфейсе визуальной студии
- 17. Как отключить Отладчик времени от визуальной студии
- 18. Печать печатает все окно, а не Просмотр
- 19. Запуск визуальной студии 2008 в текущей визуальной студии 2013
- 20. Петля в визуальной студии
- 21. Как идентифицировать символы визуальной студии?
- 22. Как управлять вкладками визуальной студии
- 23. Как интерпретировать столбец визуальной студии?
- 24. пустое окно при установке визуальной студии на окнах 10
- 25. Изменение установки визуальной студии
- 26. ошибка в визуальной студии
- 27. проект визуальной студии здания
- 28. Сессия в визуальной студии
- 29. Смена цветной визуальной студии
- 30. производительность профилирования визуальной студии
Нет, нет. Класс, который я пытаюсь вывести, не имеет переопределенного ToString, и я не хочу его писать. Но ближайшее окно как-то печатает все. Я ищу этот магический метод. – alga
Здесь нет магического метода. VS просто вызывает или оценивает членов посредством отражения. –
Что сказал Янн. VS использует отражение структуры, и вы можете сделать то же самое. См. Редактирование кода. – invert