Установка свойства отражением со строковым значением

XML XML XML XML. Мы говорим файлы конфигурации здесь . Нет никакого "налога угловой скобки", если Вы не сериализируете объекты в интенсивной производительностью ситуации.

Файлы конфигурации должны быть человекочитаемыми и человеческие понятный, в дополнение к машиночитаемому. XML является хорошим компромиссом между двумя.

, Если Ваш магазин имеет людей, которые боятся той новомодной технологии XML, я плохо себя чувствую для Вас.

298
задан Irshad 5 August 2015 в 22:46
поделиться

7 ответов

Вы можете использовать Convert.ChangeType () - он позволяет вам использовать информацию времени выполнения для любого типа IConvertible для изменения форматов представления. Однако не все преобразования возможны, и вам может потребоваться написать специальную логику, если вы хотите поддерживать преобразования из типов, не являющихся IConvertible .

Соответствующий код (без обработки исключений или специальной логики случая ) будет:

Ship ship = new Ship();
string value = "5.5";
PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude");
propertyInfo.SetValue(ship, Convert.ChangeType(value, propertyInfo.PropertyType), null);
506
ответ дан 23 November 2019 в 01:31
поделиться

Are you looking to play around with Reflection or are you looking to build a production piece of software? I would question why you're using reflection to set a property.

Double new_latitude;

Double.TryParse (value, out new_latitude);
ship.Latitude = new_latitude;
-8
ответ дан 23 November 2019 в 01:31
поделиться

Using Convert.ChangeType and getting the type to convert from the PropertyInfo.PropertyType.

propertyInfo.SetValue( ship,
                       Convert.ChangeType( value, propertyInfo.PropertyType ),
                       null );
5
ответ дан 23 November 2019 в 01:31
поделиться

Как говорили некоторые другие, вы хотите используйте Convert.ChangeType :

propertyInfo.SetValue(ship,
    Convert.ChangeType(value, propertyInfo.PropertyType),
    null);

Фактически, я рекомендую вам просмотреть весь Convert Class .

Этот класс и многие другие полезные классы являются частью система пространство имен . Я считаю полезным сканировать это пространство имен примерно каждый год, чтобы увидеть, какие функции я упустил. Попробуйте!

34
ответ дан 23 November 2019 в 01:31
поделиться

Or you could try:

propertyInfo.SetValue(ship, Convert.ChangeType(value, propertyInfo.PropertyType), null);

//But this will cause problems if your string value IsNullOrEmplty...
3
ответ дан 23 November 2019 в 01:31
поделиться

You're probably looking for the Convert.ChangeType method. For example:

Ship ship = new Ship();
string value = "5.5";
PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude");
propertyInfo.SetValue(ship, Convert.ChangeType(value, propertyInfo.PropertyType), null);
6
ответ дан 23 November 2019 в 01:31
поделиться

Я заметил, что многие люди рекомендуют Convert.ChangeType - Это работает в некоторых случаях, однако, как только вы начнете использовать обнуляемые типы , вы начнете получать InvalidCastExceptions :

http://weblogs.asp.net/pjohnson /archive/2006/02/07/Convert.ChangeType-doesn_2700_t-handle-nullables.aspx

Для решения этой проблемы несколько лет назад была написана оболочка, но она тоже не идеальна.

http://weblogs.asp.net/pjohnson/archive/2006/02/07/Convert.ChangeType-doesn_2700_t-handle-nullables.aspx

19
ответ дан 23 November 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: