anonymous-methods相关内容
在 C# 中使用 lambda 表达式或匿名方法时,我们必须警惕 访问修改闭包 的陷阱.例如: foreach(字符串中的 var ){query = query.Where(i => i.Prop == s);//访问修改后的闭包...} 由于修改了闭包,上面的代码会导致查询中的所有Where子句都基于s的最终值. 正如这里所解释的,这发生是因为在上面的 foreach 循环中声明的
..
为什么不能将匿名方法作为参数传递给 BeginInvoke 方法?我有以下代码: 私有委托 void CfgMnMnuDlg(DIServer svr);私人无效ConfigureMainMenu(DIServer服务器,){MenuStrip mnMnu = PresenterView.MainMenu;if (mnMnu.InvokeRequired){mnMnu.BeginInvoke((
..
见以下代码: 公共抽象类Base{public virtual void Foo() 其中 T : 类{Console.WriteLine("base");}}公共类派生:基础{公共覆盖 void Foo(){Console.WriteLine("派生");}公共无效砰(){Action bang = new Action(delegate { base.Foo(); });砰();
..
目前我来自函数式编程背景,如果我不了解 C# 中的闭包,请见谅. 我有以下代码来动态生成获取匿名事件处理程序的按钮: for (int i = 0; i 我希望文本 "I am button number" + i 在 for 循环的迭代中以 i 的值关闭.但是,当我实际运行程序时,每个 Button 都会显示 I am button number 7.我错过了什么?我用的是VS200
..
我不会是唯一一个厌倦了为需要委托的单次调用定义和命名委托的人.例如,我想以可能来自其他线程的表单调用 .Refresh(),所以我编写了以下代码: private void RefreshForm(){if (InvokeRequired)调用(新调用委托(刷新));别的刷新();} 我什至不确定我是否必须这样做,我只是读了足够多的书,害怕它在以后的某个阶段不起作用. InvokeDeleg
..
我能找到的关于 Func 和 Action 的所有示例都是简单,如下所示,您可以在下面的示例中看到它们在技术上是如何工作的,但我想在示例中使用它们来解决以前无法解决或只能以更复杂的方式解决的问题,即我知道它们是如何工作的,并且我可以看到它们简洁而强大,所以我想从更广泛的意义上了解它们解决了哪些类型的问题,以及我如何在应用程序设计中使用它们. 您以何种方式(模式)使用 Func 和 A
..
我试图理解为什么 BeginInvoke 方法不接受匿名方法. void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e){if (InvokeRequired){//不会编译BeginInvoke(委托(对象发送者,ProgressChangedEventArgs e){ bgWorker_ProgressC
..
我在玩 这里.我在 IL 中注意到,看起来两个匿名方法都在使用同一个生成的类,即使这意味着该类有一个额外的变量. 虽然只使用一个新的类定义似乎有些合理,但让我觉得很奇怪的是只创建了一个 c__DisplayClass2 实例.这似乎意味着 Ref 的两个实例都引用了相同的 c__DisplayClass2 这是否意味着 y 不能在 vart1 被收集之前被收集,这可能比 joi
..
一经编译,有没有区别: 委托{ x = 0;} 和 () =>{ x = 0 } ? 解决方案 简答:没有. 可能不相关的较长答案: 如果将 lambda 分配给委托类型(例如 Func 或 Action),您将获得匿名委托. 如果将 lambda 分配给 Expression 类型,您将获得表达式树而不是匿名委托.然后可以将表达式树编译为匿名委托. 编辑:这是
..
是否可以从事件中取消订阅匿名方法? 如果我订阅这样的活动: void MyMethod(){Console.WriteLine("我做到了!");}我的事件 += 我的方法; 我可以这样取消订阅: MyEvent -= MyMethod; 但如果我使用匿名方法订阅: MyEvent += delegate(){Console.WriteLine("我做到了!");}; 是否可以取
..
在我们想在 Control.Invoke 中匿名调用委托的语法上有一些问题. 我们尝试了许多不同的方法,但都无济于事. 例如: myControl.Invoke(delegate() { MyMethod(this, new MyEventArgs(someParameter)); }); 其中 someParameter 是此方法的本地 以上会导致编译错误: 无法将匿
..
在 StackOverflow 上回答了很多问题,成员指定了如何使用 lambda 表达式. 我们是否过度使用它,我们是否正在考虑使用 lambda 表达式对性能的影响? 我发现了几篇文章探讨了 lambda 与匿名委托与 for/foreach 循环对性能的影响,结果不同 匿名委托 vs Lambda 表达式 vs 函数调用性能 foreach 与 List.ForEach
..
考虑一下: var propertyinfo = typeof(Customer).GetProperty(sortExpressionStr);类型 orderType = propertyinfo.PropertyType; 现在我要声明 Func 我知道这是不可能的,因为 ordertype 是在运行时,但有什么解决方法吗? 这正是我想要做的: var propertyinf
..
我希望我的问题标题措辞得当. 在 c# 中,我可以使用 lambdas(作为委托)或旧的委托语法来执行此操作: FuncfnHello = () =>“你好";Console.WriteLine(fnHello());函数fnHello2 = 委托(){返回“你好2";};Console.WriteLine(fnHello2()); 那么为什么我不能“内联" lambda 或委托主体,并
..
一经编译,是否有区别: delegate { x = 0;} 和 () =>{ x = 0 } ? 解决方案 Short answer : no. 可能不相关的更长答案: 如果您将 lambda 分配给委托类型(例如 Func 或 Action),您将获得一个匿名委托. 如果您将 lambda 分配给表达式类型,您将获得表达式树而不是匿名委托.然后可以将表达式树编译为
..
说我是否在监听一个事件: Subject.NewEvent += delegate(object sender, NewEventArgs e){//一些代码}); 现在如何取消注册此事件?或者只是让内存泄漏? 解决方案 如果您需要取消注册事件,我建议避免事件处理程序的匿名委托. 这是将它分配给本地方法更好的一种情况 - 您可以完全取消订阅事件.
..
我有以下代码: class myClass{私人委托字符串 myDelegate(Object bj);受保护的无效方法(){myDelegate 构建 = 委托(对象 bj){var 字母 = string.Empty;如果(某些条件)返回构建(some_obj);//这一行似乎扼杀了编译器否则字符串.空;};......}} 是否有另一种方法可以在 C# 中设置匿名方法,使其可以调用自身?
..
Delphi 是否“实例化"了每个匿名方法(如对象)?如果是,Delphi 什么时候创建这个实例,最重要的是,Delphi 什么时候释放它? 因为匿名方法也会捕获外部变量并延长它们的生命周期,所以了解这些变量何时会从内存中“释放"很重要. 在另一个匿名方法中声明一个匿名方法可能有哪些缺点.是否可以循环引用? 解决方案 匿名方法被实现为接口.这篇文章很好地解释了编译器是如何完成的
..
在 C# 中使用 lambda 表达式或匿名方法时,我们必须警惕 访问修改后的闭包 陷阱.例如: foreach(字符串中的 var s){查询 = query.Where(i => i.Prop == s);//访问修改后的闭包...} 由于修改了闭包,上面的代码会导致查询的所有Where子句都基于s的最终值. 如此处所述,这发生的原因是在上面的 foreach 循环中声明的 s 变量
..
可以在 C# 中完成以下操作吗?: var greeting = "Hello" + function (){返回“世界";}() + "!"; 我想做一些类似的事情(C# 伪代码): var cell = new TableCell { CssClass = "", Text = return delegate(){return "逻辑在这里";}}; 基本上我想实现一些逻辑的内联作用域
..