112 votes

Impossible de convertir implicitement le type 'Int' en 'T'

Je peux appeler ou

Mais lors de la compilation, j’obtiens:

Impossible de convertir implicitement le type 'int' en 'T'

et la même chose pour `` .

167voto

BrokenGlass Points 91618

Vous devriez pouvoir simplement utiliser à `` la place de votre code personnalisé :

143voto

Eric Lippert Points 300275

Chaque fois que vous vous retrouvez à activer un type dans un générique, vous faites presque certainement quelque chose de mal. Les génériques doivent être génériques; ils doivent fonctionner de manière identique, complètement indépendant du type.

Si T ne peut être que int ou string, n’écrivez pas votre code de cette façon en premier lieu. Écrivez deux méthodes, l’une qui retourne un int et l’autre qui retourne une chaîne.

18voto

GregaMohorko Points 1375

En fait, vous pouvez simplement le convertir en, puis en .

``

Un exemple pour `` :

Parfois, ce comportement est souhaitable. Par exemple, lors de l’implémentation ou de la substitution d’une méthode générique à partir d’une classe ou d’une interface de base et que vous souhaitez ajouter des fonctionnalités différentes en fonction du `` type.

12voto

Reza ArabQaeni Points 2871
public T Get<T>(Stats type ) where T : IConvertible
{
    if (typeof(T) == typeof(int))
    {
        int t = Convert.ToInt16(PlayerStats[type]);
        return (T)t;
    }
    if (typeof(T) == typeof(string))
    {
        string t = PlayerStats[type].ToString();
        return (T)t;
    }
}

9voto

Michael Ciba Points 382

`` est probablement votre meilleure option. Ma solution est similaire à celle fournie par BrokenGlass avec un peu de logique d’essai de capture.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X