3 votes

Le problème des génériques

Je suis en train de faire une classe pour pouvoir tricher au minesweeper, et je suis en train de construire quelques génériques... mais je suis un peu coincé. Je veux retourner un int mais comment puis-je le convertir ?

public T ReadMemory<T>(uint adr)
{
    if( address != int.MinValue )
        if( typeof(T) == typeof(int) )
            return Convert.ChangeType(MemoryReader.ReadInt(adr), typeof(T));
        else
            MessageBox.Show("Unknown read type");
}

7voto

Chris Taylor Points 25865

Vous devez convertir la valeur de retour de l'appel à la fonction ChangeType

return (T)Convert.ChangeType(MemoryReader.ReadInt(adr), typeof(T));

1voto

Darin Dimitrov Points 528142

Essayez de couler :

return (T)Convert.ChangeType(MemoryReader.ReadInt(adr), typeof(T));

1voto

PVitt Points 5652

J'ai essayé de corriger les erreurs de compilation. Mais je ne sais pas si c'est exactement ce que vous recherchez.

Vous devez convertir le résultat en T

return (T)Convert.ChangeType( MemoryReader.ReadInt( adr ), typeof( T ) );

et vous devez retourner une valeur lorsque les conditions échouent :

return default( T );

Cela se traduit par :

public T ReadMemory<T>( uint adr )
{
    if ( adr != int.MinValue )
    {
        if ( typeof( T ) == typeof( int ) )
        {
            return (T)Convert.ChangeType( MemoryReader.ReadInt( adr ), typeof( T ) );
        }
        else
        {
            System.Windows.Forms.MessageBox.Show( "Unknown read type" );
        }
    }
    return default( T );
}

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