Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

void in C# generics?

Tags:

c#

generics

I have a generic method that takes a request and provides a response.

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

But I don't always want a response for my request, and I don't always want to feed request data to get a response. I also don't want to have to copy and paste methods in their entirety to make minor changes. What I want, is to be able to do this:

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

Is this feasible in some manner? It seems that specifically using void doesn't work, but I'm hoping to find something analogous.

like image 784
directedition Avatar asked Jul 03 '12 20:07

directedition


1 Answers

You cannot use void, but you can use object: it is a little inconvenience because your would-be-void functions need to return null, but if it unifies your code, it should be a small price to pay.

This inability to use void as a return type is at least partially responsible for a split between the Func<...> and Action<...> families of generic delegates: had it been possible to return void, all Action<X,Y,Z> would become simply Func<X,Y,Z,void>. Unfortunately, this is not possible.

like image 93
Sergey Kalinichenko Avatar answered Sep 28 '22 02:09

Sergey Kalinichenko