2011-12-02 3 views
1

Je le psuedocodeSpécification type de retour

T foo<T>(string bar) 
{ 
if (typeof(T) == typeof(string)) 
{ 
    return bar; 
} 
... 

Bien que le code ne marche pas vraiment faire beaucoup de sens, est-il possible d'obtenir quelque chose de similaire au-dessus de travail? J'ai essayé return (T)bar et return bar as T en vain.

edit: Apologies, pseudocode corrigé.

+1

Parce que vous avez une méthode void, ou est-ce qu'il me manque quelque chose? – CodeCaster

+0

Qu'essayez-vous d'accomplir? Que se passe-t-il après cela si? –

+0

votre méthode est tapée comme retournant le vide, qu'essayez-vous de retourner? –

Répondre

4

Vous pouvez le faire:

T foo<T>(string bar) 
{ 
if (typeof(T) == typeof(string)) 
{ 
    return (T)(object)bar; 
} 
... 

Mais si vous faites quelque chose de différent en fonction du type de T, vous devriez probablement revoir votre conception ... peut-être génériques ne sont pas la meilleure option pour ce que vous Essayons de faire.

+0

pas sûr qui downvoted mais un commentaire pourquoi serait gentil –

+1

@jsobo: ne sais pas qui non plus, mais le code original dans la réponse a montré un retour de 'void', c'est probablement pourquoi quelqu'un downvoted (le formulaire édité est maintenant correct). –

+0

@jsobo: regardez les éditions – IAbstract

1

Vous pseudo-méthode est void, donc il ne s'attend pas à une valeur de retour.

0

Avez-vous essayé de tester le type correctement par exemple

if (T.GetType().Equals(typeof(String))) {} 

aussi ce qui est ce que vous êtes vraiment essayer de le faire ..? Êtes-vous familier avec la façon d'utiliser Generics ..?

+2

'T' est un paramètre de type,' typeof (T) 'est correct, pas' T.GetType() ' –

0

Vous devez spécifier le type de retour - pas void

T foo<T>(string bar){ 
if (typeof(T) == typeof(string)){ 
    return (T)(object)bar; 
} 
} 

Mais cela ne fait pas de sens - pourquoi voudriez-vous faire? En règle générale, votre signature ressemblerait à quelque chose comme:

void foo<T>(T bar){ 
if (typeof(T) == typeof(string)){ 
    // do something useful with bar 
} 
} 

... dans l'exemple ci-dessus, modifier void pour retourner tout ce qui est le résultat de quelque chose d'utile.

+1

cela ne compilera pas ... parce que la barre est une chaîne pas un T ... –

+0

@jsobo: merci ... édité – IAbstract