How can I write a generic anonymous method?

mpen picture mpen · Dec 2, 2010 · Viewed 8k times · Source

Specifically, I want to write this:

public Func<IList<T>, T> SelectElement = list => list.First();

But I get a syntax error at T. Can't I have a generic anonymous method?

Answer

Eric Lippert picture Eric Lippert · Dec 2, 2010

Nope, sorry. That would require generic fields or generic properties, which are not features that C# supports. The best you can do is make a generic method that introduces T:

public Func<IList<T>, T> SelectionMethod<T>() { return list => list.First(); }

And now you can say:

Func<IList<int>, int> selectInts = SelectionMethod<int>();