问题标签 [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 投票
5 回答
186297 浏览

c# - C# 中的方法组是什么?

在以下情况下,我经常遇到诸如“无法从'方法组'转换为'字符串'”之类的错误:

当然,最后一行有一个错字,因为我忘记了后面的调用括号ToString。正确的形式是:

但是我开始想知道什么是方法组。Google没有太多帮助,也没有MSDN

0 投票
3 回答
7393 浏览

c#-3.0 - 将方法组转换为表达式

我试图弄清楚是否有将方法组转换为表达式的简单语法。使用 lambdas 似乎很容易,但它不能转化为方法:

给定

以下所有内容均有效:

但是如果我用实例方法尝试同样的方法,它会在表达式中崩溃:

最后两个都无法编译“无法将方法组'AFuncIntInt'转换为非委托类型'System.Linq.Expressions.Expression<...>'。您打算调用该方法吗?”

那么有没有一种很好的语法来捕获表达式中的方法组呢?

谢谢,阿恩

0 投票
7 回答
2217 浏览

c# - “<”运算符错误

为什么( i < UniqueWords.Count )表达式在 for 循环中有效,但在我的 if 中返回“CS0019 运算符'<'不能应用于'int'和'方法组'类型的操作数”错误?它们都是先前声明的字符串数组。

编辑添加声明:

//像这样添加的元素。. . .

解决了。谢谢,方法.Count()需要括号我仍然不完全理解为什么它们并不总是必要的。

Jon Skeet,谢谢,我想我也不明白声明到底是什么?您想要分配的实际值?它们是从外部源中提取的,但是是字符串。

我得到它!谢谢。(至少是()。)

0 投票
2 回答
2430 浏览

c# - C#方法组奇怪

我发现了一些非常奇怪的东西,我希望能更好地理解。

可以重写为:

怎么可能省略 lambda 表达式参数 (i=>) 并且仍然将当前项目传递给 console.WriteLine?

感谢您的任何见解。-基思

0 投票
2 回答
957 浏览

c# - C# Language Design: method group inside `is` operator

I'm interesting in some design choices of C# language. There is a rule in C# spec that allows to use method groups as the expressions of is operator:

Condition above is always false, as the specification says:

7.10.10 The is operator

If E is a method group or the null literal, of if the type of E is a reference type or a nullable type and the value of E is null, the result is false.

My questions: what is the purpose/point/reason of allowing to use the C# language element with no runtime representation in CLR like method groups inside the such "runtime" operator like is?

0 投票
7 回答
3070 浏览

c# - 如果可用,使用 C# 方法组有什么好处吗?

在处理类似 a 的事情时,List<string>您可以编写以下内容:

或者您可以使用方法组来执行相同的操作:

我更喜欢第二行代码,因为它对我来说看起来更干净,但这有什么好处吗?

0 投票
2 回答
1475 浏览

c# - 为什么添加返回类型会阻止我使用方法组语法?

我正在尝试在 lambda 表达式中使用方法组,如下所示:

但是,当我将返回类型更改为Helloint,我得到

'Bar.Hello(string)' 的返回类型错误。

我试过用Func代替Action,但这似乎阻止我使用方法组语法。

有任何想法吗?

(我的目标,fwiw,是能够引用具有不同返回类型和大量字符串参数的众多方法。我什至不打算调用它们 - 我只是想反映它们的属性。我确实喜欢安全然而,与只输入方法名称字符串相比,lambdas。)


编辑:澄清我想要使用的原因Action<string>int在我的示例中可能是多种类型中的任何一种。我尝试模板化该类型——

- 但是编译器不能派生T(大概是出于同样的原因,我不能在返回类型上重载?)。

还有其他想法吗?在这种情况下,只要我能让编译器检查该方法组的名称,我并不反对一些疯狂的反思。

0 投票
2 回答
66048 浏览

c# - 无法从“方法组”转换为“System.Action”' error

I have created the following function:

public void DelegatedCall(Action<Object> delegatedMethod)

And defined the following method

public vo

I have created the following function:

And defined the following method

However, when I try to call DelegateCall with foo1:

...I get the following compiler error:

Argument 1: cannot convert from 'method group' to 'System.Action<object>'

What is the reason for this error and how can I correct it? Unfortunately, casting foo1 to Action is not an option.


Variance doesn't work that way around; you would need

As even in 4.0 it won't believe that every object is a string.

Note that if it was foo1(object) and Action<string> (i.e. the other way around) it probably would work (in 4.0), since every string is an object.

0 投票
2 回答
157 浏览

c# - 错误分配代表使用?: 句法

我创建了一个委托和两个匹配方法。

当我尝试使用以下语法将这些方法中的任何一个分配给委托时(请注意,此代码位于同一类的静态方法中):

我得到错误:

无法确定条件表达式的类型,因为“方法组”和“方法组”之间没有隐式转换

我可以使用常规if ... else语句来完成这项任务,它工作得很好。但是我不明白为什么我不能使用更紧凑的版本并且我不明白错误消息。有谁知道这个错误的含义?

0 投票
2 回答
2578 浏览

c# - 重载的方法组参数混淆了重载解析?

以下对重载Enumerable.Select方法的调用:

失败并出现歧义错误(为清楚起见删除了命名空间):

我当然可以理解为什么明确指定类型参数会导致模棱两可(两种重载都适用),但这样做之后我看不到一个。

对我来说似乎很清楚,目的是调用第一个重载,方法组参数解析为Tuple.Create<char>(char). 第二个重载不应该应用,因为没有一个 Tuple.Create重载可以转换为预期的Func<char,int,Tuple<char>>类型。我编译器被 混淆了Tuple.Create<char, int>(char, int),但它的返回类型是错误的:它返回一个二元组,因此不能转换为相关Func类型。

顺便说一句,以下任何一项都会使编译器高兴:

  1. 为方法组参数指定类型参数:(Tuple.Create<char>也许这实际上是一个类型推断问题?)。
  2. 使参数成为 lambda 表达式而不是方法组:x => Tuple.Create(x)Select(在通话中使用类型推断效果很好)。

不出所料,尝试以Select这种方式调用另一个重载也会失败:

这里的确切问题是什么?