问题标签 [method-group]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何通过“发件人”对象检查“方法组”?
想象一下这样的方法(在 Win Forms 中):
我希望我很清楚,那就是我想知道哪个方法正在调用“GetData”。注意我知道我可以有一个全局变量并将其设置为某个值,但我想知道是否有直接的方法来做到这一点?
谢谢。
c# - lambda表达式和方法组的区别
有什么区别
和
?
Resharper 建议使用第一个表达式。
c# - 这个 ReSharper 片段“转换为方法组”实际上在做什么?
修改前的代码:
改进后的代码:
这是在做什么?brands
它是否在集合中的每个项目上隐式运行该映射?
c# - 方法推断不适用于方法组
考虑
CS0121 错误的描述是
以下方法或属性之间的调用不明确:
'System.Linq.Enumerable.Sum<string>(System.Collections.Generic.IEnumerable<string>, System.Func<string,decimal>)'
和'System.Linq.Enumerable.Sum<string>(System.Collections.Generic.IEnumerable<string>, System.Func<string,decimal?>
)'
我不明白的是,什么信息s => GetValue(s)
给编译器根本GetValue
没有 - 后者不是前者的语法糖吗?
c# - 使用 C# 方法组执行代码
在更新我的 UI 代码(.NET 4.0 应用程序中的 C#)时,由于在错误线程中执行对 UI 的调用,我遇到了奇怪的崩溃。但是,我已经在主线程上调用了该调用,因此崩溃没有任何意义:MainThreadDispatcher.Invoke(new Action(View.Method))
因“调用线程无法访问此对象,因为不同的线程拥有它”而崩溃。在 View 属性上。
经过进一步调查,我找到了原因:我正在通过方法组调用。我曾认为使用方法组或委托/lambda 本质上是相同的(另请参见这个问题和这个问题)。相反,将方法组转换为委托会导致代码执行,检查View
. 这是立即完成的,即在导致崩溃的原始(非 UI)线程上。如果我改用 lambda,则稍后会在正确的线程中检查属性。
至少可以这么说,这似乎很有趣。C# 标准中是否有提到这一点的地方?还是由于需要找到正确的转换而隐含?
这是一个测试程序。一是直接方式。其次,分两个步骤,更好地显示发生了什么。为了获得更多乐趣,我会Item
在创建委托后进行修改。
简洁版本:
c# - 如何传递一个方法组的重载?
编辑:这是我自己的错误(结合外部一些意想不到的变化)。请忽略此帖,不便之处敬请见谅!
在我过去只是通过此方法之前:
现在供应商添加了另一个重载,如 void DoSomething(string, string)
。我试图将该方法作为参数传递,但编译器抱怨它cannot convert the method group,
是有道理的,我猜因为DoSomething
现在有 2 个签名。
问题是,我如何只通过一个signature
?
c# - 为什么委托必须是静态的?
在下面的代码中,我必须声明方法,MdrResponseInterpreter
static
否则会出现编译错误。
为什么?由于_mdrResponseBuilder
不是静态的,我希望MdrResponseInterpreter
应该能够访问this
c# - C# 委托逆变与 lambda 表达式
下面的第二种测试方法无法编译(无法将 lambda 表达式转换为目标类型D1
)。这是否意味着(非泛型)委托逆变不适用于 lambda 表达式?
vb.net - VB.NET 中的方法组?
James Michael Hare 最近写了一篇关于Char
静态方法的博客文章。他谈到使用方法组来编写简洁的 LINQ:
VB.NET 中的等价物是:
可悲的是,我不能在这里做与 C# 等效的操作……编译器告诉我Overload resolution failed because no accessible 'IsLower' accepts this number of arguments
……悲伤。我以为这可能是因为我一直Option Strict
在做,但可惜,这也不起作用。
我假设方法组在 VB.NET 中不可用...在 VB.NET 中是否有类似的功能可用?或者有什么特殊原因不能(不会)在 VB.NET 中完成?
linq - 使用方法组给我以下方法或属性之间的调用不明确:
我想在 Linq 中调用一个简单的方法组,但收到此错误。
The call is ambiguous between the following methods or properties: 'System.Linq.Enumerable.Select<string,int>(System.Collections.Generic.IEnumerable<string>, System.Func<string,int>)' and 'System.Linq.Enumerable.Select<string,int>(System.Collections.Generic.IEnumerable<string>, System.Func<string,int,int>)'
我知道调用哪个方法之间存在歧义。但是,我的问题是,有没有一种方法可以在不正常调用该方法的情况下指定签名。我想通过不必使用 lambda 表达式来节省打字。
谢谢。