日期:2014-05-20  浏览次数:20841 次

关于var与委托的问题.
2008中,类似的语句无法通过编译
C# code
var d = (string s, object o) => {Console.WriteLine(s, o);};

错误是:Cannot assign lambda expression to an implicitly-typed local variable
在不显式的声明Delegate的情况下,如果实现?

------解决方案--------------------
例子:

Func<string, string> e = (x) => string.Format("lamda 表达式被执行: [{0}]!", x);
Console.WriteLine(e("@@@@"));
System.Linq.Expressions.Expression<Func<string, string>> f = (x) => string.Format("lamda 表达式被执行: [{0}]!", x);
Console.WriteLine("lamda表达式中共有{0}个参数。", f.Parameters.Count);
var g = f.Compile();
Console.WriteLine(g("这是编译后的结果。"));

------解决方案--------------------
这是C# 3.0的语法,上次还和装配脑袋讨论来着。
我觉得是微软搞不清你到底想把这个Lambda表达式当作匿名方法(委托)来处理还是当作Expression来处理,尽管可以通过Lambda表达式推断出匿名方法的类型。


在VB中,记得好像是默认当作匿名方法来处理。