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

Je peux appeler Get<int>(Stat); ou Get<string>(Name);

Mais lors de la compilation j'obtiens:

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

et la même chose pour string.

public T Get<T>(Stats type) where T : IConvertible
{
    if (typeof(T) == typeof(int))
    {
        int t = Convert.ToInt16(PlayerStats[type]);
        return t;
    }
    if (typeof(T) == typeof(string))
    {
        string t = PlayerStats[type].ToString();
        return t;
    }
}
  • Vous pensez probablement que si le bloc vérifié que T est de type int, donc à l'intérieur du bloc, tu sais que T est de type int et vous devriez être en mesure de convertir implicitement int à T. Mais le compilateur n'est pas conçu pour suivre ce raisonnement, il sait juste que, généralement, les T ne provient pas de l'int, afin de ne pas permettre la conversion implicite. (Et si le compilateur pris en charge, le vérificateur ne serait pas, si l'assembly compilé serait invérifiable.)
InformationsquelleAutor David W | 2011-11-17