125 votes

void en C# generics ?

J'ai une méthode générique qui prend une requête et fournit une réponse.

public Tres DoSomething<Tres, Treq>(Tres response, Treq request)
{/*stuff*/}

Mais je ne veux pas toujours obtenir une réponse à ma demande, et je ne veux pas toujours fournir des données de demande pour obtenir une réponse. Je ne veux pas non plus avoir à copier et coller des méthodes dans leur intégralité pour apporter des modifications mineures. Ce que je veux, c'est pouvoir le faire :

public Tre DoSomething<Tres>(Tres response)
{
    return DoSomething<Tres, void>(response, null);
}

Est-ce possible d'une manière ou d'une autre ? Il semble que l'utilisation spécifique de void ne fonctionne pas, mais j'espère trouver quelque chose d'analogue.

3voto

Oded Points 271275

void bien qu'il s'agisse d'un type, n'est valable que comme type de retour d'une méthode.

Il n'y a aucun moyen de contourner cette limitation de void .

3voto

Gru Points 187

Ce que je fais actuellement, c'est créer des types scellés personnalisés avec un constructeur privé. C'est mieux que de lancer des exceptions dans le c-tor parce qu'il n'est pas nécessaire d'attendre l'exécution pour se rendre compte que la situation est incorrecte. C'est un peu mieux que de renvoyer une instance statique parce qu'on n'a pas à l'allouer une seule fois. C'est un peu mieux que de retourner static null parce que c'est moins verbeux du côté de l'appelant. La seule chose que l'appelant peut faire est de renvoyer null.

public sealed class Void {
    private Void() { }
}

public sealed class None {
    private None() { }
}

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