t3rse
t3rse

Reputation: 10124

Is List<T> where T is an anonymous delegate possible?

Is it possible to create a list of anonymous delegates in C#? Here is code I would love to write but it doesn't compile:

Action<int> method;
List<method> operations = new List<method>();

Upvotes: 6

Views: 660

Answers (3)

Khanzor
Khanzor

Reputation: 5010

The problem with your code is that you are trying to specify an instance as a type argument to List.

Action<int> method is an instance, whereas Action<int> is a type.

As another poster mentions, you just need to declare the type of list as Action<int>, that is, with just the type parameter.

e.g.

var myNum = 5;

var myops = new List<Action<int>>();
myops.Add(j => j++);
myops.Add(j => j++);

foreach(var method in myops)
{
   Console.WriteLine(method(myNum));
}

// Frowned upon, but fun syntax

myops.Each(method => method(myNum));

Upvotes: 3

Joren
Joren

Reputation: 14746

It's certainly possible to create a list of a specific delegate type, like Action or Func, or any others. Since anonymous delegates can be cast to any delegate type with a compatible signature, you can create a list of delegates as long as they have compatible signatures.

I don't think creating a list of delegates with multiple kinds of signatures would be of much use, since having an unspecified signature would make it very hard to call a delegate. You should be able to do so with reflection, though. In that case you can just use a list of object.

Upvotes: 0

Rohan West
Rohan West

Reputation: 9298

You can write this, for example

        Action<int> method = j => j++;
        List<Action<int>> operations = new List<Action<int>>();

        operations.Add(method);
        operations.Add(i => i++);

Upvotes: 16

Related Questions