Метод литейного типа (.Net)

Я пытаюсь создать общий метод для создания объекта, но, похоже, он не может взломать этот каштан. (Это пятница, 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?

Ответ 1

Вы можете использовать Convert.ChangeType, если типы, которые вы используете, реализуете IConvertible (все примитивные типы).

    Convert.ChangeType(value, targetType);

Ответ 2

Посмотрите на метод Convert.ChangeType, я думаю, что он удовлетворит ваши потребности.

Ответ 3

Вы не можете применить его к типу, который вы указываете динамически.

Вместо этого вы можете использовать generics, но мне понадобится больше кода, чтобы увидеть, как он может вам помочь.

Ответ 4

Вы можете сделать что-то вроде следующего:

    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 для функции типа изменения