問題タブ [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。正しい形式は次のとおりです。

しかし、私はメソッドグループとは何か疑問に思いました。グーグルはあまり助けにもMSDNでもありません。

0 投票する
3 に答える
7393 参照

c#-3.0 - メソッドグループを式に変換

メソッド グループを式に変換するための簡単な構文があるかどうかを調べようとしています。ラムダで十分に簡単に思えますが、メソッドには変換されません:

与えられた

以下はすべて有効です。

しかし、インスタンスメソッドで同じことをしようとすると、式で壊れます:

最後の 2 つは両方とも、「メソッド グループ 'AFuncIntInt' を非デリゲート型 'System.Linq.Expressions.Expression<...>' に変換できません。メソッドを呼び出すつもりでしたか?」というエラーでコンパイルに失敗します。

では、式でメソッド グループをキャプチャするための適切な構文はありますか?

ありがとう、アルネ

0 投票する
7 に答える
2217 参照

c# - 「<」演算子エラー

( i < UniqueWords.Count ) 式が for ループで有効なのに、if に配置すると "CS0019 演算子 '<' は型 'int' および 'メソッド グループ' のオペランドに適用できません" というエラーが返されるのはなぜですか? どちらも以前に宣言された文字列配列です。

宣言を追加するために編集されました:

//要素はこのように追加されます。. . .

解決しました。ありがとう、メソッド .Count() には括弧が必要でした。必ずしも必要ではない理由をまだ完全には理解していません。

Jon Skeet、ありがとう、宣言が正確に何であるか理解できないと思いますか? 割り当てられた実際の値が必要ですか? これらは外部ソースから取得されますが、文字列です。

わかった!ありがとう。(()は少なくとも。)

0 投票する
2 に答える
2430 参照

c# - C#メソッドグループの奇妙さ

私はもっ​​とよく理解したいと思っている非常に奇妙な何かを発見しました。

これは次のように書き直すことができます。

ラムダ式パラメーター(i =>)を省略しても、現在のアイテムをconsole.WriteLineに渡すにはどうすればよいですか?

洞察をありがとう。-キース

0 投票する
2 に答える
957 参照

c# - C#言語設計:`is`演算子内のメソッドグループ

私はC#言語のいくつかのデザインの選択に興味があります。isC#仕様には、演算子の式としてメソッドグループを使用できるようにするルールがあります。

仕様にあるように、上記の条件は常にfalseです。

7.10.10is演算子

Eがメソッドグループまたはnullリテラルの場合、Eの型が参照型またはnull許容型であり、Eの値がnullの場合、結果はfalseになります。

私の質問: CLRのような「ランタイム」演算子内のメソッドグループのようなランタイム表現なしでC#言語要素を使用できるようにする目的/ポイント/理由はis何ですか?

0 投票する
7 に答える
3070 参照

c# - 可能な場合、C#メソッドグループを使用する利点はありますか?

のようなものを扱うときList<string>は、次のように書くことができます。

または、メソッドグループを使用して同じ操作を実行できます。

コードの2行目は見た目がすっきりしているので好きですが、これには何か利点がありますか?

0 投票する
2 に答える
1475 参照

c# - 戻り型を追加すると、メソッドグループ構文を使用できなくなるのはなぜですか?

次のように、ラムダ式でメソッドグループを使用しようとしています。

ただし、のリターンタイプをに変更するHelloと、int

'Bar.Hello(string)'の戻りタイプが間違っています。

Funcの代わりに試してみましActionたが、メソッドグループ構文を使用できなくなっているようです。

何か案は?

(私の目標であるfwiwは、さまざまな戻り値と多くの文字列引数を持つ多数のメソッドを参照できるようにすることです。それらを呼び出すつもりはありません。属性を反映したいだけです。安全性が気に入っています。ただし、ラムダの数は、メソッド名の文字列を入力するだけではありません。)


編集:使用したい理由を明確にするために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



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.


Not finding it easy to create an Html helper as the ctx passed in is that of the template, and it has no idea of the parent view. Faking the Url is not possible to pass to the GetLocalResourceObject for 2 reasons:

1 if you're using areas, the templates context lies about its virtual url and physical url.

2: you cannot new up a ResourceExpressionBuilder and call ParseExpression on the resource expression using a "fake" url to try and trick the system into thinking the template comes from the folder containing the App_LocalResources holding the required resx.

Gutted!!

As another hack i am going to try adding the templates into the folders using linked items. I'll report back with my findings.

0 投票する
2 に答える
157 参照

c# - ? を使用してデリゲートを割り当て中にエラーが発生しました : 構文

デリゲートと 2 つの一致するメソッドを作成しました。

次の構文を使用して、これらのメソッドのいずれかをデリゲートに割り当てようとすると (このコードは同じクラスの静的メソッドにあることに注意してください)。

エラーが発生します:

「メソッド・グループ」と「メソッド・グループ」の間に暗黙的な変換がないため、条件式のタイプを判別できません

通常のif ... elseステートメントを使用してこの割り当てを行うことができ、問題なく機能します。しかし、よりコンパクトなバージョンを使用できない理由と、エラー メッセージがわかりません。このエラーの意味を知っている人はいますか?

0 投票する
2 に答える
2578 参照

c# - オーバーロードされたメソッドグループ引数はオーバーロードの解決を混乱させますか?

Enumerable.Selectオーバーロードされたメソッドへの次の呼び出し:

あいまいなエラーで失敗します (わかりやすくするために名前空間は削除されています)。

型引数を明示的に指定しないとあいまいさが生じる理由は確かに理解できますが(両方のオーバーロードが適用されます)、その後はわかりません。

method-group 引数がTuple.Create<char>(char). 期待される型Tuple.Createに変換できるオーバーロードがないため、2 番目のオーバーロードは適用しないでください 。コンパイラが によって混乱してFunc<char,int,Tuple<char>>いると推測Tuple.Create<char, int>(char, int)していますが、その戻り値の型が間違っています。2 つのタプルを返すため、関連するFunc型に変換できません。

ところで、次のいずれかがコンパイラを満足させます。

  1. method-group 引数の type-argument の指定: Tuple.Create<char>(おそらく、これは実際には型推論の問題でしょうか?)。
  2. 引数をメソッド グループではなくラムダ式にする: x => Tuple.Create(x). (呼び出しの型推論でうまく機能しSelectます)。

当然のことながら、この方法で の他のオーバーロードを呼び出そうとしてSelectも失敗します。

ここでの正確な問題は何ですか?