Tag: 匿名方法

在匿名方法中使用MethodInfo.GetCurrentMethod()

public static void Main(string[] args) { Action a = () => Console.WriteLine(MethodInfo.GetCurrentMethod().Name); a(); } 此代码将返回一个模糊的字符串,如下所示: b__0 。 有没有办法忽略匿名方法并获得更可读的方法名称?

linq匿名方法中的局部变量范围(闭包)

Linq Query中声明的局部变量的范围是什么。 我正在编写以下代码 static void Evaluate() { var listNumbers = Enumerable.Range(1, 10).Select(i => i); int i = 10; } 编译器标记错误在行int i = 10,说明 A local variable named ‘i’ cannot be declared in this scope because it would give a different meaning to ‘i’, which is already used in a ‘child’ scope to denote something else […]

lambda表达式如何在内部工作?

在查找这个问题的答案时:“ 为什么在匿名方法中不允许使用out参数? ”我对lambda表达式和匿名方法实际如何工作有点遗憾。 在评论中,JaredPar声称“想象一下,例如out参数引用堆栈上的局部变量.lambda可以在将来的任意点执行,因此可以在堆栈帧不再有效时执行”。 我指出,如果不是任何其他变量的情况……这基本上让我想知道我对lambda表达式的真正了解。 我想到的是这样的事情: public void Foo(ComplexObject val, out SomeDelegate outDelegate) { ComplexObject obj = new ComplexObject(val) SomeDelegate = delegate(int other) { return (obj.value * other); } } public void Bar() { SomeDelegate MyDel = null; Foo(5, out MyDel); int finalRes = MyDel(100); // Whatever } 在那种情况下,我真的不知道发生了什么。 obj是堆栈上的引用,它在方法返回时不再有效,因此匿名方法应该能够(如果可行)实际知道它是引用类型并复制引用而不是值,如果它…如果“用例”或多或少相同,为什么不参考params工作呢?

匿名方法和委托

我试图理解为什么BeginInvoke方法不接受匿名方法。 void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (InvokeRequired) { //Won’t compile BeginInvoke(delegate(object sender, ProgressChangedEventArgs e) { bgWorker_ProgressChanged(sender, e); }); } progressBar1.Increment(e.ProgressPercentage); } 它告诉我’无法从’匿名方法’转换为’System.Delegate’,而当我将匿名方法转换为委托时,它确实有效吗? BeginInvoke((progressDelegate)delegate { bgWorker_ProgressChanged(sender, e); });

在成员初始化程序中不能使用’this’吗?

这合法吗? 它是否包含隐藏的错误或缺陷? Visual Studio不会给出任何错误或警告,但ReSharper会: /// /// immutable tuple for two /// public class Pair : Singleton { public TValue2 Value2 { get; private set; } public Pair(TValue1 value1, TValue2 value2, Func<Pair, String> toStringFunc) : this(value1, value2, () => toStringFunc(this)) { } //Red light }2> : Singleton

匿名方法作为BeginInvoke的参数?

为什么不能将匿名方法作为参数传递给BeginInvoke方法? 我有以下代码: private delegate void CfgMnMnuDlg(DIServer svr); private void ConfigureMainMenu(DIServer server,) { MenuStrip mnMnu = PresenterView.MainMenu; if (mnMnu.InvokeRequired) { mnMnu.BeginInvoke((CfgMnMnuDlg)ConfigureMainMenu, new object[] { server}); } else { // Do actual work here } } 我试图避免宣布代表。 为什么我不能写下面的东西呢? 或者我可以,我只是无法弄清楚正确的语法? 以下目前生成: 参数类型’System.Delegate’不能赋予参数类型’匿名方法’ 好吧,这当然是正确的,但是我可以使用其他一些语法来做到这一点(避免为了使用BeginInvoke()而声明一个单独的委托吗? (能够做到这一点将完全符合使用anon方法/ lamdas代替显式委托的概念,这些委托在其他地方工作得非常干净。) private void ConfigureMainMenu(DIServer server,) { MenuStrip mnMnu = PresenterView.MainMenu; if (mnMnu.InvokeRequired) { mnMnu.BeginInvoke( […]

C#事件处理程序委托中的闭包?

我现在来自function编程背景,如果我不理解C#中的闭包,请原谅我。 我有以下代码来动态生成获取匿名事件处理程序的按钮: for (int i = 0; i < 7; i++) { Button newButton = new Button(); newButton.Text = "Click me!"; newButton.Click += delegate(Object sender, EventArgs e) { MessageBox.Show("I am button number " + i); }; this.Controls.Add(newButton); } 我期望文本”I am button number ” + i在for循环的迭代中用i的值关闭。 但是,当我实际运行程序时,每个Button都说I am button number 7 。 我错过了什么? 我正在使用VS2005。 编辑:所以我想我的下一个问题是,如何捕捉价值?

将此委托转换为匿名方法或lambda

我是所有匿名function的新手,需要一些帮助。 我得到以下工作: public void FakeSaveWithMessage(Transaction t) { t.Message = “I drink goats blood”; } public delegate void FakeSave(Transaction t); public void SampleTestFunction() { Expect.Call(delegate { _dao.Save(t); }).Do(new FakeSave(FakeSaveWithMessage)); } 但这完全是丑陋的,我想让Do的内部成为匿名方法,如果可能的话,甚至是lambda。 我试过了: Expect.Call(delegate { _dao.Save(t); }).Do(delegate(Transaction t2) { t2.Message = “I drink goats blood”; }); 和 Expect.Call(delegate { _dao.Save(t); }).Do(delegate { t.Message = “I drink goats […]

如何在System.Reflection中识别匿名方法

如何通过reflection识别匿名方法?

C#:匿名方法与命名方法

我是SO的新手,日复一日地使用技术(C#)术语进行编程和学习。 谷歌搜索了一段时间后,下面是我研究的methods Method是一个语句块,用于代码可重用性,它还支持使用不同的SIGNATURE进行重载….例如:drawShape(2pts),drawShape(3pts)等… Anonymous方法是一个带有语句块的方法,但没有名称….(因为它过早要求,在wt情况下我们遇到匿名方法……任何文章,样本……) Named method :这是一个链接,但最后我没有得到命名方法实际上是… 任何人都可以解释什么是“命名”方法,我们在哪里使用匿名方法?