問題タブ [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 - メソッドグループを式に変換
メソッド グループを式に変換するための簡単な構文があるかどうかを調べようとしています。ラムダで十分に簡単に思えますが、メソッドには変換されません:
与えられた
以下はすべて有効です。
しかし、インスタンスメソッドで同じことをしようとすると、式で壊れます:
最後の 2 つは両方とも、「メソッド グループ 'AFuncIntInt' を非デリゲート型 'System.Linq.Expressions.Expression<...>' に変換できません。メソッドを呼び出すつもりでしたか?」というエラーでコンパイルに失敗します。
では、式でメソッド グループをキャプチャするための適切な構文はありますか?
ありがとう、アルネ
c# - 「<」演算子エラー
( i < UniqueWords.Count ) 式が for ループで有効なのに、if に配置すると "CS0019 演算子 '<' は型 'int' および 'メソッド グループ' のオペランドに適用できません" というエラーが返されるのはなぜですか? どちらも以前に宣言された文字列配列です。
宣言を追加するために編集されました:
//要素はこのように追加されます。. . .
解決しました。ありがとう、メソッド .Count() には括弧が必要でした。必ずしも必要ではない理由をまだ完全には理解していません。
Jon Skeet、ありがとう、宣言が正確に何であるか理解できないと思いますか? 割り当てられた実際の値が必要ですか? これらは外部ソースから取得されますが、文字列です。
わかった!ありがとう。(()は少なくとも。)
c# - C#メソッドグループの奇妙さ
私はもっとよく理解したいと思っている非常に奇妙な何かを発見しました。
これは次のように書き直すことができます。
ラムダ式パラメーター(i =>)を省略しても、現在のアイテムをconsole.WriteLineに渡すにはどうすればよいですか?
洞察をありがとう。-キース
c# - C#言語設計:`is`演算子内のメソッドグループ
私はC#言語のいくつかのデザインの選択に興味があります。is
C#仕様には、演算子の式としてメソッドグループを使用できるようにするルールがあります。
仕様にあるように、上記の条件は常にfalseです。
7.10.10is演算子
• Eがメソッドグループまたはnullリテラルの場合、Eの型が参照型またはnull許容型であり、Eの値がnullの場合、結果はfalseになります。
私の質問: CLRのような「ランタイム」演算子内のメソッドグループのようなランタイム表現なしでC#言語要素を使用できるようにする目的/ポイント/理由はis
何ですか?
c# - 可能な場合、C#メソッドグループを使用する利点はありますか?
のようなものを扱うときList<string>
は、次のように書くことができます。
または、メソッドグループを使用して同じ操作を実行できます。
コードの2行目は見た目がすっきりしているので好きですが、これには何か利点がありますか?
c# - 戻り型を追加すると、メソッドグループ構文を使用できなくなるのはなぜですか?
次のように、ラムダ式でメソッドグループを使用しようとしています。
ただし、のリターンタイプをに変更するHello
と、int
'Bar.Hello(string)'の戻りタイプが間違っています。
Func
の代わりに試してみましAction
たが、メソッドグループ構文を使用できなくなっているようです。
何か案は?
(私の目標であるfwiwは、さまざまな戻り値と多くの文字列引数を持つ多数のメソッドを参照できるようにすることです。それらを呼び出すつもりはありません。属性を反映したいだけです。安全性が気に入っています。ただし、ラムダの数は、メソッド名の文字列を入力するだけではありません。)
編集:使用したい理由を明確にするためにAction<string>
:int
私の例では、いくつかのタイプのいずれかである可能性があります。そのタイプをテンプレート化してみました-
-しかし、コンパイラは派生できませんT
(おそらく、リターンタイプでオーバーロードできないのと同じ理由で?)。
他のアイデアはありますか?この場合、コンパイラにそのメソッドグループの名前をチェックさせることができる限り、私はいくつかのクレイジーな反省に反対していません。
c# - ? を使用してデリゲートを割り当て中にエラーが発生しました : 構文
デリゲートと 2 つの一致するメソッドを作成しました。
次の構文を使用して、これらのメソッドのいずれかをデリゲートに割り当てようとすると (このコードは同じクラスの静的メソッドにあることに注意してください)。
エラーが発生します:
「メソッド・グループ」と「メソッド・グループ」の間に暗黙的な変換がないため、条件式のタイプを判別できません
通常のif ... else
ステートメントを使用してこの割り当てを行うことができ、問題なく機能します。しかし、よりコンパクトなバージョンを使用できない理由と、エラー メッセージがわかりません。このエラーの意味を知っている人はいますか?
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
型に変換できません。
ところで、次のいずれかがコンパイラを満足させます。
- method-group 引数の type-argument の指定:
Tuple.Create<char>
(おそらく、これは実際には型推論の問題でしょうか?)。 - 引数をメソッド グループではなくラムダ式にする:
x => Tuple.Create(x)
. (呼び出しの型推論でうまく機能しSelect
ます)。
当然のことながら、この方法で の他のオーバーロードを呼び出そうとしてSelect
も失敗します。
ここでの正確な問題は何ですか?