"dynamic" for anonymous delegates?
anonymous-delegates, c#, delegates, dynamic
Solution
This works, but it looks a little odd. You can give it any delegate, it will run it and also return a value.
You also need to specify the anonymous method signature at some point in order for the compiler to make any sense of it, hence the need to specify `Action<T>` or `Func<T>` or whatever.
Why can't an anonymous method be assigned to var?
static void Main(string[] args)
{
Action d = () => Console.WriteLine("Hi");
Execute(d); // Prints "Hi"
Action<string> d2 = (s) => Console.WriteLine(s);
Execute(d2, "Lo"); // Prints "Lo"
Func<string, string> d3 = (s) =>
{
Console.WriteLine(s);
return "Done";
};
var result = (string)Execute(d3, "Spaghettio"); // Prints "Spaghettio"
Console.WriteLine(result); // Prints "Done"
Console.Read();
}
static object Execute(Delegate d, params object[] args)
{
return d.DynamicInvoke(args);
}
Problem
I wonder if there is a possibility to make the "dynamic" type for variables work for anonymous delegates. I've tried the following: ``` dynamic v = delegate() { }; ``` But then I got the following error message: `Cannot convert anonymous method to type 'dynamic' because it is not a delegate type` Unfortunately, also the following code doesn't work: ``` Delegate v = delegate() { }; object v2 = delegate() { }; ``` What can I do if I want to make a Method that accepts any type of Delegate, even inline declared ones? For example: ``` class X{ public void Y(dynamic d){ } static void Main(){ Y(delegate(){}); Y(delegate(string x){}); } } ```