我尝试创建这样的调用,它在javascript中运行良好:
service.DoAction(new { param1="sometext", onOk= () => { Console.WriteLine("ok"); }});
Run Code Online (Sandbox Code Playgroud)
但它不会编译错误:
无法将"匿名方法"分配给匿名类型属性
要么
无法将"lambda表达式"分配给匿名类型属性
知道为什么没有授权吗?语言限制?
lambda的想法是它无法知道代表没有上下文的匿名方法的委托的类型.需要将其分配给具有已知委托类型的内容,以便可以推断出委托的类型.
匿名类型属性还需要根据您分配的类型推断其类型.他们每个人都试图从彼此推断出这种类型,并且它从未在任何地方指定过.
您需要明确指出要用于编译的委托类型:
var foo = new
{
hi = "Hi!",
doSomething = new Action(() => Console.WriteLine("Done!"))
};
Run Code Online (Sandbox Code Playgroud)