XML XML XML XML. Мы говорим файлы конфигурации здесь . Нет никакого "налога угловой скобки", если Вы не сериализируете объекты в интенсивной производительностью ситуации.
Файлы конфигурации должны быть человекочитаемыми и человеческие понятный, в дополнение к машиночитаемому. XML является хорошим компромиссом между двумя.
, Если Ваш магазин имеет людей, которые боятся той новомодной технологии XML, я плохо себя чувствую для Вас.
Вы можете использовать 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);
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;
Using Convert.ChangeType
and getting the type to convert from the PropertyInfo.PropertyType
.
propertyInfo.SetValue( ship,
Convert.ChangeType( value, propertyInfo.PropertyType ),
null );
Как говорили некоторые другие, вы хотите используйте Convert.ChangeType
:
propertyInfo.SetValue(ship,
Convert.ChangeType(value, propertyInfo.PropertyType),
null);
Фактически, я рекомендую вам просмотреть весь Convert
Class .
Этот класс и многие другие полезные классы являются частью система
пространство имен . Я считаю полезным сканировать это пространство имен примерно каждый год, чтобы увидеть, какие функции я упустил. Попробуйте!
Or you could try:
propertyInfo.SetValue(ship, Convert.ChangeType(value, propertyInfo.PropertyType), null);
//But this will cause problems if your string value IsNullOrEmplty...
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);
Я заметил, что многие люди рекомендуют Convert.ChangeType
- Это работает в некоторых случаях, однако, как только вы начнете использовать обнуляемые типы
, вы начнете получать InvalidCastExceptions
:
Для решения этой проблемы несколько лет назад была написана оболочка, но она тоже не идеальна.