2009-08-31 5 views
0

Comment procéder pour que cela fonctionne? Vous cherchez à avoir le résultat mis à jour avec le 100 en utilisant le typage générique. Des idées? Bien sûr, cette fonction n'est pas complète, j'ai juste besoin de la fonctionnalité de résultat pour continuer.C# Typecast Paramètre de référence générique

public static bool ReadMemory<T>(Process process, IntPtr address, ref T result) 
    { 
     Type objType = result.GetType(); 

     switch (objType.Name) 
     { 
      case "Int32": 
       result = (T)100; 
       return true; 
      default: 
       return false; 
     } 
    } 
+2

Combien de cas avez-vous pour le commutateur? Aussi, je suis incapable de comprendre l'utilisation de génériques lorsque vous vérifiez pour le type dans le code. – shahkalpesh

+0

D'accord avec shahkalpesh. Qu'est-ce que vous essayez réellement d'accomplir ici? – spender

+1

En effet. Vous le faites mal. Le but des génériques est d'être, bien, * générique *. Si vous devez faire des choses différentes pour des arguments de types différents, ce n'est pas * generic *. –

Répondre

1

Je refactoriserais ceci et retournerais le résultat. je lancerais une exception si le commutateur ou les verrous if/else tombaient en bas de la méthode. Vous pourriez alors attraper l'échec dans try/catch dans le code client.

0

vous devez juste speciailize pour les types:

public static bool ReadMemory(Process process, IntPtr address, ref int result) 
{ 
    result = 100; 
    return true; 
} 

public static bool ReadMemory(Process process, IntPtr address, ref float result) 
{ 
    result = 100.0f; 
    return true; 
} 
Questions connexes