问题标签 [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.

0 投票
0 回答
1012 浏览

events - 无法分配给“ResizeEnd”,因为它是“方法组”

我正在使用 Visual Studio 2010。在我的表单设计器中,我向 ResizeEnd 事件添加了一个事件处理程序。生成的代码如下所示:

this.ResizeEnd += new System.EventHandler(this.ResizeEndEventHandler);

此代码由 Visual Studio 添加到我的源代码中,生成错误说明:无法分配给“ResizeEnd”,因为它是“方法组”

如果您错误地尝试为方法分配值,我之前已经看到过此错误......但在添加事件处理程序时从未见过。

任何关于导致此问题或如何解决此问题的想法将不胜感激。

0 投票
3 回答
321 浏览

c# - 什么时候说发生了方法组转换是有效的?

因此,当可以安全地说发生方法组转换时,我并不真正相信。我们从上一篇文章中得到了这个多播委托:

我说只有当我们分配了一个重载的方法并且至少一个重载与委托匹配时,才会发生方法组转换。在这种情况下,没有方法组转换。

一位程序员同行说,如果你不认为 MyDelegate myDel = AddNumbers; (名称指问题)是方法组转换,那会是什么呢?

C# 语言规范:存在从方法组(第 7.1 节)到兼容委托类型的隐式转换(第 6.1 节)。给定一个委托类型 D 和一个被归类为方法组的表达式 E,如果 [...]

那么哪种观点是正确的呢?

0 投票
3 回答
511 浏览

java - 如何为一组方法编写单元测试,其中每个方法都依赖于其他方法?

我是编写单元测试的新手,在为以下场景编写测试用例时遇到了困难:

createB()如果特定名称的实例B已经存在,该方法将返回 null。因此,为了测试createB()成功完成的案例,我必须打电话getB()检查它是否存在然后removeB()将其删除:

这违反了“一个测试用例必须失败只有一个原因”的规则,如果测试失败,我不知道问题出在哪里。测试getB()方法也是一样,createB()必须调用作为开始测试的先决条件。我正在使用 JUnit,每次开始测试时测试用例都会被打乱。是否有任何最佳实践来确保在这种情况下隔离测试用例?

还要注意,该getInstanceOfA()方法是从另一个库提供的 API 调用,并且无法控制获取A.

0 投票
1 回答
283 浏览

c# - 试图将项目添加到 ListBox,称其为方法组?C#

我正在尝试将项目移动到列表框,但它将我的列表框称为方法组。该程序有多个类。这是我目前所拥有的...

人是另一个类。这是代码...

0 投票
1 回答
342 浏览

c# - C# 委托作为对象

免责声明:此问题的单元测试相关信息并不真正相关 -如果您不熟悉此问题,可以跳至“问题” ,但它有助于设置上下文。

我有一门课需要进行单元测试。它看起来像这样:

我想使用 NUnit参数化单元测试来测试所有这些方法。下面是测试方法:

测试用于TestCaseSourceAttribute指定一个字段,该字段包含测试方法的参数集列表。

现在,NUnit 需要一个名为CheckRange_Overflow_Inputs,类型为 的字段object[],它本身包含object[]元素,每个元素都包含测试方法参数的值。

问题:

理想情况下,我想这样写字段:

但是编译器抱怨它不能将方法组转换为对象。

这是有道理的——NumberParser.CheckByteRange可能是模棱两可的,例如它可能过载。

但是我怎样才能让编译器允许我保存(作为对象)调用的方法,该方法NumberParser.CheckByteRange需要 astring并返回void

我试过的(和失败的成功):

0 投票
1 回答
425 浏览

c# - 将方法组作为参数传递时,为什么 C# 编译器不解析仅返回类型不同的委托类型?

请考虑以下代码:

它不能在 VS2012 上编译。编译器抱怨说,该行中对方法 Foobar 的引用Test(Foobar)是模棱两可的。这是我收到的全部错误消息:

现在,解决方法是将 Foobar 强制转换为 Action 以强制正确的重载:Test((Action)Foobar).

但我对原因很感兴趣,为什么 C# 不能自己解决这个问题?为什么他必须认为 aFunc<bool>将是 - 函数的有效重载void()

我知道您不能使用仅在返回类型上有所不同的另一种方法来重载方法。但这里似乎并非如此。我没有超载Foobar()。当然,返回值可能不是 Foobar 签名的一部分,但在从方法组转换为委托时,为什么这很重要?

我也意识到这个问题,编译器有时拒绝将具有重载方法的方法组转换为特定的委托,即使他可以拥有他需要的所有信息,但我认为这是一个不同的问题(和不同的错误消息) . 再次 - Foobar 没有超载。只是Test()


编辑:正如马修指出的那样,问题与链接的问题相同。但是,我对 Eric Lippert 和 Jon Skeet 给出的(非常好的)答案并不是 100% 满意。

在他的回答的一部分中,埃里克说:

这里的原则是确定方法组的可转换性需要使用重载决议从方法组中选择一个方法,而重载决议不考虑返回类型

任何线索为什么会这样?对我来说,解决问题的方法似乎就是改变上面这句话,并且在从方法组中选择方法时还要考虑返回类型。期间,结束了,每个人都很高兴,不是吗?;)

为什么这个模棱两可的错误很糟糕的一个实际例子是,Task.Run()不能在没有强制转换的情况下用于void()自己类的 -methods。因此,即使在我看到的一些 MSDN 示例中,它们也使用Task.Run(() => Foobar())了更清洁的Task.Run(Foobar).

0 投票
6 回答
92269 浏览

c# - 无法分配,因为它是 C# 方法组?

无法分配“AppendText”,因为它是“方法组”。

错误出现在 button1_Click 方法内的“textBox2.AppendText = text”行。

0 投票
1 回答
87 浏览

c# - += 运算符和新的运算符 c#

使用 += 运算符后跟“新函数”与仅使用函数名称有什么不同?

例如

或者

后来的作品,关于何时使用什么有一些规则吗?

0 投票
1 回答
146 浏览

c# - 为什么在这种情况下调用 lambda 中的方法时,将方法组传递给重载方法会导致歧义?

// Compiler Error当在所有其他情况下都正确推断出类型时,为什么不能在下面代码中标记的行上推断出要调用的正确重载?

这是编译器错误:

0 投票
2 回答
8019 浏览

c# - 无法分配给“金钱”,因为它是“方法组”

我正在为班级做一个项目,我必须Money从班级中调用该函数Player。但是,我不知道如何更改Money为不是Method Group. 我不太懂编程,所以我的解决方案范围很小。另外,老师说我不能对班级进行任何更改Main,只能对Player班级进行任何更改。

这是Main该类的代码:

这是我的 Player 类中的“Money”函数: