2009-10-23 7 views
11

J'essaye de créer une méthode générique pour lancer un objet, mais je ne peux pas sembler craquer cette châtaigne. (Il est vendredi 15 heures, été une longue semaine)Méthode de moulage de type générique (.Net)

Ok, donc je ce scénario:

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

Comment puis-je jeter cet objet génériquement sans créer un nombre infini de if-else-staments?

+0

Voulez-vous taper le lancer du type représenté par la 'type' variables ? Comment déclareriez-vous le castedObj? I.e quel type donneriez-vous? Il n'y a aucun point de typage si vous le stockez en tant qu'objet de toute façon ... –

+0

Vous ne pouvez pas convertir un entier boxed en un type de structure autre que int (ou int?) (Voir http://blogs.msdn.com/ericlippert/archive/ 2009/03/19/representation-and-identity.aspx pour plus de détails.) Si vous devez le faire, vous devez utiliser autre chose qu'une distribution. –

Répondre

17

Vous pouvez utiliser la méthode Convert.ChangeType si les types que vous utilisez implémentent IConvertible (tous les types primitifs le font).

Convert.ChangeType(value, targetType); 
3

Jetez un oeil à la méthode Convert.ChangeType, je pense que cela répondra à vos besoins.

0

Vous ne pouvez pas le convertir en un type que vous spécifiez dynamiquement.

Vous pouvez envisager d'utiliser generics à la place, mais j'aurais besoin de plus de code pour voir comment cela peut vous aider.

0

Vous pouvez faire quelque chose comme ce qui suit:

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

Kudos à Monsters Go My.net pour la fonction de type de changement

Questions connexes