问题标签 [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#-3.0 - 将方法组转换为表达式
我试图弄清楚是否有将方法组转换为表达式的简单语法。使用 lambdas 似乎很容易,但它不能转化为方法:
给定
以下所有内容均有效:
但是如果我用实例方法尝试同样的方法,它会在表达式中崩溃:
最后两个都无法编译“无法将方法组'AFuncIntInt'转换为非委托类型'System.Linq.Expressions.Expression<...>'。您打算调用该方法吗?”
那么有没有一种很好的语法来捕获表达式中的方法组呢?
谢谢,阿恩
c# - “<”运算符错误
为什么( i < UniqueWords.Count )表达式在 for 循环中有效,但在我的 if 中返回“CS0019 运算符'<'不能应用于'int'和'方法组'类型的操作数”错误?它们都是先前声明的字符串数组。
编辑添加声明:
//像这样添加的元素。. . .
解决了。谢谢,方法.Count()需要括号我仍然不完全理解为什么它们并不总是必要的。
Jon Skeet,谢谢,我想我也不明白声明到底是什么?您想要分配的实际值?它们是从外部源中提取的,但是是字符串。
我得到它!谢谢。(至少是()。)
c# - C#方法组奇怪
我发现了一些非常奇怪的东西,我希望能更好地理解。
可以重写为:
怎么可能省略 lambda 表达式参数 (i=>) 并且仍然将当前项目传递给 console.WriteLine?
感谢您的任何见解。-基思
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
?
c# - 如果可用,使用 C# 方法组有什么好处吗?
在处理类似 a 的事情时,List<string>
您可以编写以下内容:
或者您可以使用方法组来执行相同的操作:
我更喜欢第二行代码,因为它对我来说看起来更干净,但这有什么好处吗?
c# - 为什么添加返回类型会阻止我使用方法组语法?
我正在尝试在 lambda 表达式中使用方法组,如下所示:
但是,当我将返回类型更改为Hello
时int
,我得到
'Bar.Hello(string)' 的返回类型错误。
我试过用Func
代替Action
,但这似乎阻止我使用方法组语法。
有任何想法吗?
(我的目标,fwiw,是能够引用具有不同返回类型和大量字符串参数的众多方法。我什至不打算调用它们 - 我只是想反映它们的属性。我确实喜欢安全然而,与只输入方法名称字符串相比,lambdas。)
编辑:澄清我想要使用的原因Action<string>
:int
在我的示例中可能是多种类型中的任何一种。我尝试模板化该类型——
- 但是编译器不能派生T
(大概是出于同样的原因,我不能在返回类型上重载?)。
还有其他想法吗?在这种情况下,只要我能让编译器检查该方法组的名称,我并不反对一些疯狂的反思。
c# - 错误分配代表使用?: 句法
我创建了一个委托和两个匹配方法。
当我尝试使用以下语法将这些方法中的任何一个分配给委托时(请注意,此代码位于同一类的静态方法中):
我得到错误:
无法确定条件表达式的类型,因为“方法组”和“方法组”之间没有隐式转换
我可以使用常规if ... else
语句来完成这项任务,它工作得很好。但是我不明白为什么我不能使用更紧凑的版本并且我不明白错误消息。有谁知道这个错误的含义?
c# - 重载的方法组参数混淆了重载解析?
以下对重载Enumerable.Select
方法的调用:
失败并出现歧义错误(为清楚起见删除了命名空间):
我当然可以理解为什么不明确指定类型参数会导致模棱两可(两种重载都适用),但这样做之后我看不到一个。
对我来说似乎很清楚,目的是调用第一个重载,方法组参数解析为Tuple.Create<char>(char)
. 第二个重载不应该应用,因为没有一个 Tuple.Create
重载可以转换为预期的Func<char,int,Tuple<char>>
类型。我猜编译器被 混淆了Tuple.Create<char, int>(char, int)
,但它的返回类型是错误的:它返回一个二元组,因此不能转换为相关Func
类型。
顺便说一句,以下任何一项都会使编译器高兴:
- 为方法组参数指定类型参数:(
Tuple.Create<char>
也许这实际上是一个类型推断问题?)。 - 使参数成为 lambda 表达式而不是方法组:
x => Tuple.Create(x)
。Select
(在通话中使用类型推断效果很好)。
不出所料,尝试以Select
这种方式调用另一个重载也会失败:
这里的确切问题是什么?