2009-10-23 3 views
11

Я пытаюсь создать общий метод для создания объекта, но, похоже, он не может взломать этот каштан. (Это пятница 3 вечера, была долгая неделя)Метод литейного типа (.Net)

Итак, у меня есть такой сценарий:

// 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; 

Как я могу бросить этот объект в общем, не создавая бесконечное количество, если это-ELSE-staments?

+0

ли Вы хотите напечатать привести его к типу, представленному 'type' переменной ? Как бы вы объявили castedObj? Какой тип вы бы дали? Нет никакого типа typecasting, если вы сохраните его как объект в любом случае ... –

+0

Вы не можете наложить вложенный int в любой тип структуры, отличный от int (или int?) (См. Http://blogs.msdn.com/ericlippert/archive/ 2009/03/19/presentation-and-identity.aspx для подробностей.) Если вам нужно это сделать, вам нужно использовать что-то отличное от приведения. –

ответ

17

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

Convert.ChangeType(value, targetType); 
3

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

0

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

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

0

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

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

Смежные вопросы