一旦编译完成,它们之间是否存在差异:
delegate { x = 0; }
Run Code Online (Sandbox Code Playgroud)
和
() => { x = 0 }
Run Code Online (Sandbox Code Playgroud)
?
我刚刚在本论坛的一些问题中提到了这种语法,但Google和任何其他搜索引擎都会在搜索中阻止除字母和数字之外的任何内容,因此无法搜索"=>".
那么有谁能告诉我它是什么以及如何使用它?
任何人都可以提供匿名方法和lambda表达式之间的简洁区别吗?
使用匿名方法:
private void DoSomeWork()
{
if (textBox1.InvokeRequired)
{
//textBox1.Invoke((Action)(() => textBox1.Text = "test"));
textBox1.Invoke((Action)delegate { textBox1.Text = "test"; });
}
}
Run Code Online (Sandbox Code Playgroud)
是仅仅将普通的lambda表达式强制转换为强类型的委托,还是有更多的表达式.
我很清楚一个强类型的代表就像跟随
UpdateTextDelegate mydelegate = new UpdateTextDelegate(MethodName)
Run Code Online (Sandbox Code Playgroud)
足够作为类型的参数System.Delegate,但匿名方法的想法对我来说是新的.
我一直试图解决这个问题很长一段时间(阅读在线博客和关键词),但到目前为止还没有成功.
代表们是什么?什么是Lambda表达式?两者的优点和缺点?何时使用其中一种可能的最佳做法?
提前致谢.
随着lambda表达式(内联代码)等新功能的出现,它是否意味着我们不再需要使用委托或匿名方法了?在我看过的几乎所有样本中,都是使用新语法进行重写.
我们仍然需要使用delegates和lambda表达式的任何地方都不起作用?
1:
Func<int, int> myFunc = new Func<int,int>(delegate(int x) {
return x + 1;
});
Run Code Online (Sandbox Code Playgroud)
2:
Func<int, int> myFunc = delegate(int x) {
return x + 1;
};
Run Code Online (Sandbox Code Playgroud)
3:
Func<int, int> myFunc = x => x + 1;
Run Code Online (Sandbox Code Playgroud)
他们之间有什么区别?
阅读文章"匿名方法"(作为文章系列"C#3.0中的代理和Lambda表达式"的一部分)中的短语:
" 高级主题:无参数匿名方法
...允许匿名方法省略参数列表(delegate { return Console.ReadLine() != ""}例如).这是非典型的,但它确实允许相同的匿名方法出现在多个场景中,即使委托类型可能会有所不同 "*
我变得有点困惑.
IMO(现在找不到但据我记得),类型由参数列表确定,但不是由方法的返回类型确定.这是对的吗?
那么,无参数方法或委托的类型如何不同?
任何(最简单的)代码示例说明了相同的匿名方法的不同无参数委托类型将是值得赞赏的.
var seq = Enumerable.Range(1, 10).Reverse();
var sort1 = seq.OrderBy(i => i);
var sort2 = seq.OrderBy(delegate(int i) { return i; });
Run Code Online (Sandbox Code Playgroud)
我认为sort2更明确但排序1更短.除此之外,我真的不知道其中的区别.这样做的推荐方法是什么?