Список всех свойств и полей открытого класса во время разработки в Visual Studio

#c# #visual-studio-2010 #ide #code-generation

#c# #visual-studio-2010 #ide #генерация кода

Вопрос:

Возможно ли получить список всех общедоступных элементов типа в IDE Visual Studio?

При написании тестов мне часто нужно присвоить всем общедоступным полям / установщикам в классе / структуре некоторое значение.

Лучше всего было бы, если бы я мог ввести:

 MyType x = new MyType();
  

а затем автоматически создайте что-то вроде

 x.StrProp = "StrProp";
x.IntProp = 0;
x.DtProp = DateTime.Now;
x.OtherProp = new Othertype()
  

Но простое получение списка, а затем использование редактирования столбцов, очень помогло бы

Редактировать: Выяснилось, что это было не очень сложно сделать с помощью макроса

Ответ №1:

Как насчет запуска сеанса отладки, прерывания в начале, а затем вызова чего-то вроде

 typeof(System.Windows.Forms.Control)
    .GetProperties(System.Reflection.BindingFlags.Public | 
        System.Reflection.BindingFlags.Instance)
  

в ближайшем окне? 🙂

Результат выглядит примерно так:

 {System.Reflection.PropertyInfo[0x0000004a]}
    [0x00000000]: {System.Windows.Forms.AccessibleObject AccessibilityObject}
    [0x00000001]: {System.String AccessibleDefaultActionDescription}
    [0x00000002]: {System.String AccessibleDescription}
    [0x00000003]: {System.String AccessibleName}
    [0x00000004]: {System.Windows.Forms.AccessibleRole AccessibleRole}
    [0x00000005]: {Boolean AllowDrop}
  

К сожалению, вы не можете использовать лямбда-выражения в непосредственном окне — это упростило бы получение свойств в удобном для вас формате. Но тогда я бы предложил написать действительно простой инструмент, который загружает вашу сборку, позволяет вам выбрать тип и просто выводит код в нужном формате (и / или копирует его в буфер обмена или в редактор VS). Этот инструмент, по крайней мере, сделает именно то, что вам нужно. Затем настройте инструмент, например, как внешний инструмент в Visual Studio, чтобы упростить его запуск с текущим проектом.