問題タブ [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 フォームで):
つまり、「GetData」を呼び出しているメソッドを知りたいということです。グローバル変数を持って何かに設定できることは知っていますが、これを行う直接的な方法があるかどうか知りたいですか?
ありがとう。
c# - ラムダ式とメソッドグループの違い
の違いは何ですか
と
?
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プロパティで。
さらに調査したところ、原因が見つかりました。メソッドグループを介して呼び出していました。メソッドグループまたはデリゲート/ラムダを使用することは本質的に同じことだと思っていました(この質問とこの質問も参照してください)。代わりに、メソッドグループをデリゲートに変換すると、コードが実行され、の値がチェックされますView
。これはすぐに実行されます。つまり、クラッシュの原因となった元の(UI以外の)スレッドで実行されます。代わりにラムダを使用する場合、プロパティのチェックは後で行われるため、正しいスレッドで行われます。
控えめに言っても、それは面白そうです。これが言及されているC#標準の場所はありますか?それとも、正しい変換を見つける必要があるため、それは暗黙的ですか?
これがテストプログラムです。まず、直接的な方法です。次に、2つのステップで、何が起こるかをよりよく示します。さらに楽しくするためItem
に、デリゲートが作成された後で変更します。
短縮版:
c# - メソッドグループの1つのオーバーロードを渡す方法は?
編集:それは私自身の間違いです(外部のいくつかの予期しない変更と組み合わされています)。この投稿を無視して、ご不便をおかけして申し訳ありません。
このメソッドを渡す前に:
ここで、ベンダーはvoidのような別のオーバーロードを追加しましたDoSomething(string, string)
。メソッドをパラメーターとして渡そうとしましたが、コンパイラーが文句を言います。これは、2つのシグネチャがcannot convert the method group,
あるので意味があります。DoSomething
問題は、どうすれば1つだけを渡すことができるかということsignature
です。
c# - なぜデリゲートは静的でなければならないのですか?
以下のコードでは、メソッドを宣言する必要がありMdrResponseInterpreter
static
ます。そうしないと、コンパイル エラーが発生します。
なんで?_mdrResponseBuilder
静的ではないので、MdrResponseInterpreter
アクセスできるはずですthis
c# - ラムダ式を使用したC#デリゲートの反変性
以下の2番目のテストメソッドはコンパイルされません(ラムダ式をターゲットタイプに変換できませんD1
)。これは、(非ジェネリック)デリゲートの共変性がラムダ式で機能しないことを意味しますか?
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>)'
どのメソッドを呼び出すかにはあいまいさがあることを理解しています。しかし、私の質問は、メソッドを通常は呼び出さずに署名を指定する方法があるかどうかです。ラムダ式を使用する必要がないため、タイピングを節約したいと思います。
ありがとう。