Запрашивать у пользователя значения для всех опубликованных c свойств класса - PullRequest
0 голосов
/ 12 февраля 2020

C# позволяет относительно просто получить все публичные c свойства или получить значение свойства по имени .

Но как насчет * 1007? * настройка значений свойств? Для простого тестового приложения я хотел бы иметь возможность сделать что-то вроде этого псевдокода, который перечисляет publi c свойства для экземпляра класса, запрашивает у пользователя значения и устанавливает свойства на основе этих значений - преобразование из входных строк в свойство введите по мере необходимости:

for(Property p in typeof(instance))
{
 s = ReadLine("Enter the value for {p.Name}, type {p.Type}");
 SetPropertyValue(instance,p.Name, p.Type.parse(s));
}

Основная проблема, с которой я сталкиваюсь, которая затрудняет использование общего вспомогательного метода SetPropertyValue, заключается в том, что Parse не всегда существует. Это подходит для большинства базовых c типов, но не для string, конечно, или для типов более высокого уровня.

Я не против, если произойдет сбой на типах, которые он не поддерживает, потому что мое использование в основном быть int, short, string, byte, и т. д. c, но как я могу использовать отражение, чтобы подбросить что-то для тестовых приложений в консольном режиме?

1 Ответ

1 голос
/ 13 февраля 2020

@ Mr. Мальчик - что-то в этом роде?:

    ...
    public class Class1
    {
            public int IntProperty { get; set; }
            public string StringProperty { get; set; }
    }
    ...
    var instance1 = new Class1();
    var typeofclass1 = typeof(Class1);
    System.Reflection.PropertyInfo[] listProperty = instance1.GetType().GetProperties();
    var somevalue = "1234";
    foreach(var p in listProperty)
    {
            p.SetValue(instance1, Convert.ChangeType(somevalue, p.PropertyType), null);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...