Ответ 1
Вы можете использовать Convert.ChangeType, если типы, которые вы используете, реализуете IConvertible (все примитивные типы).
Convert.ChangeType(value, targetType);
Я пытаюсь создать общий метод для создания объекта, но, похоже, он не может взломать этот каштан. (Это пятница, 15:00, была длинной неделей)
Итак, у меня есть такой сценарий:
// We have a value (which .net sets as a double by default)
object obj = 1.0;
// We have the target type as a string, which could be anything:
// say string sometType = "System.Decimal"
Type type = Type.GetType(someType);
// I need a generic way of casting this
object castedObj = (xxx) obj;
Как я могу создать этот объект в целом без создания бесконечного числа if-else-staments?
Вы можете использовать Convert.ChangeType, если типы, которые вы используете, реализуете IConvertible (все примитивные типы).
Convert.ChangeType(value, targetType);
Посмотрите на метод Convert.ChangeType, я думаю, что он удовлетворит ваши потребности.
Вы не можете применить его к типу, который вы указываете динамически.
Вместо этого вы можете использовать generics, но мне понадобится больше кода, чтобы увидеть, как он может вам помочь.
Вы можете сделать что-то вроде следующего:
Type underlyingType = Type.GetType(someType);
if (underlyingType.IsGenericType && underlyingType.GetGenericTypeDefinition().Equals(typeof (Nullable<>)))
{
var converter = new NullableConverter(underlyingType);
underlyingType = converter.UnderlyingType;
}
// Try changing to Guid
if (underlyingType == typeof (Guid))
{
return new Guid(value.ToString());
}
return Convert.ChangeType(value, underlyingType);
Престижность Monsters Go My.net для функции типа изменения