問題タブ [anonymous-methods]

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 に答える
48390 参照

.net - DataTable.Select vs DataTable.rows.Find vs foreach vs Find(Predicate)/ラムダ

メモリにキャッシュされているDataTable/コレクションがあります。これをソースとして使用して、オートコンプリートテキストボックスの結果を生成します(もちろんAJAXを使用)。データをすばやく取得するためのさまざまなオプションを評価しています。データテーブルのコレクション/行のアイテム数は、10000から2,000,000まで変化する可能性があります。(流用されないように、今のところ決定が下されたと仮定すると、十分なRAMがあり、データベースクエリではなくキャッシュを使用します)

この処理のための追加のビジネスロジックがいくつかあります。priorityコレクションの列(int)に従って、オートコンプリートリストに優先順位を付ける必要があります。したがって、誰かが検索してMicro、で始まる単語/文の結果が20と表示された場合、結果Microの上位10項目を最も優先度の高いものとして選択します。(したがって、文字列値に関連付けられた優先度プロパティを持つ必要があります)。

コレクションアイテムはすでにアルファベット順にソートされています。

この場合の最良の解決策は何でしょうか。
1. DataTable.Select(を使用します。2。DataTable.Rows.Find(を使用します。3。foreach
またはfor でカスタムコレクションを使用して、その値を反復処理します。4.匿名のデリゲートまたはラムダ でジェネリックコレクションを使用します(どちらも同じパフォーマンスどうか?)

0 投票する
6 に答える
19780 参照

vb.net - VB.NET には無名関数がありますか?

私がグーグルで見つけたものから、VB.NETには1ステートメントのラムダしかなく、複数ステートメントの無名関数はありません。しかし、私が読んだ記事はすべて古いバージョンの VB.NET に関するもので、vs2008 ベータ 1 または 2 よりも新しいものは見つかりませんでした。

質問: VB.NET でこれを行うにはどうすればよいですか?

C# コード:

0 投票する
9 に答える
39004 参照

c# - ラムダ式を使用しない場合

多くの質問が Stack Overflow で回答されており、メンバーはラムダ式を使用してこれらの現実世界/時間の問題を解決する方法を指定しています。

ラムダ式の使用によるパフォーマンスへの影響を考慮していますか?

ラムダ vs 匿名デリゲート vs for/foreachループのパフォーマンスへの影響を調べた記事をいくつか見つけましたが、結果は異なります

  1. 匿名デリゲート vs ラムダ式 vs 関数呼び出しのパフォーマンス
  2. foreach と List.ForEach のパフォーマンス
  3. .NET/C# ループ パフォーマンス テスト (FOR、FOREACH、LINQ、およびラムダ) .
  4. DataTable.Select は LINQ より高速です

適切なソリューションを選択する際の評価基準は何ですか? ラムダを使用すると、コードがより簡潔になり、読みやすくなるという明白な理由を除いて。

0 投票する
5 に答える
25820 参照

c# - ラムダ式と匿名メソッドを使用した ThreadPool.QueueUserWorkItem

スレッドプールの新しいスレッドに 2 つのパラメーターを渡すのは複雑な場合がありますが、ラムダ式と匿名メソッドを使用すれば、次のようにできるようです。

ここで、この例を単純化しましたが、次の点が重要です。

  • 渡される文字列オブジェクトは不変であるため、スレッドセーフです
  • s1 変数と s2 変数は、try ブロックのスコープ内で宣言されます。このブロックは、作業をスレッド プールのキューに入れたらすぐに終了します。そのため、s1 変数と s2 変数はその後変更されることはありません。

これに何か問題がありますか?

別の方法は、test、s1、s2 の 3 つのメンバーを持つ不変型を実装する新しいクラスを作成することです。これは、現時点では何のメリットもない余分な作業のように思えます。

0 投票する
1 に答える
469 参照

anonymous-methods - CodeDom - 匿名メソッドを生成できますか?

匿名メソッドを生成する方法が見つかりません。何か案は?

0 投票する
4 に答える
4400 参照

delphi - 匿名メソッドの範囲

匿名メソッドの良い点の 1 つは、呼び出しコンテキストでローカルな変数を使用できることです。これが出力パラメーターと関数の結果に対して機能しない理由はありますか?

もちろん、非常に人工的な例ですが、これが役立つ状況に遭遇しました。

これをコンパイルしようとすると、コンパイラは「シンボルをキャプチャできません」と不平を言います。また、これを実行しようとすると、一度内部エラーが発生しました。

編集次のような通常のパラメーターで機能することに気付きました

それは他のケースと同じくらい問題ではありませんか?匿名メソッドが実行されるたびに、参照が生きているオブジェクトを指していることを誰が保証しますか?

0 投票する
1 に答える
2221 参照

c# - Func への暗黙的な変換

IMyInterface<T>1 つの関数を単純に記述するインターフェースがあるとします。

これを に置き換えることもできFunc<T, T>ますが、セマンティック上の理由からインターフェイスが必要です。そのインターフェイスとの間の暗黙的な変換を定義して、代わりにFunc<T,T>使用した場合と同じように、このインターフェイスをパラメーターとして受け入れる関数に引数として匿名デリゲートまたはラムダを渡すことができるようにすることはできますか?Func<T,T>

上記で宣言されたインターフェースを使用して実証するには、次のような関数が必要です。

私はこのように呼び出すことができます:

結果は「hello world」になります。

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

c# - 匿名メソッドでキャプチャされた変数をどのように解放/破棄/破棄しますか?

COM オブジェクトでイベントを処理するために匿名メソッドを使用しています。プログラムが終了すると、監視していたすべてのリソースに対して最初の例外 (InvalidComObjectException) が発生するという点で、匿名メソッドで使用しているリソースが「正しく閉じられていない」ように見えます。これは大したことではないと思いますが、「正しい」とは感じません。

匿名メソッドの範囲外でキャプチャされた変数にアクセスする方法を理解することはできません(とにかく、できるはずはありません)。アプリケーションを終了する前にリソースを閉じる/破棄するにはどうすればよいですか?

編集: 簡単に読み直した後、ここで何をしているのかはっきりしないかもしれません。COM オブジェクトを使用するマネージ アプリケーションを作成しています。

さらに編集: ArcGIS Engineを使用して GIS データを操作しています。この特定のケースでは、ILayerEvents_Event の VisibilityChanged イベントを使用して、GIS レイヤーがいつ表示または非表示になるかを監視しています。イベントはブール値 (可視または不可視) のみを渡し、レイヤー名は渡さないため、可視状態の変更を作成するには、レイヤーごとにメソッドを作成する必要があります。私は動的レイヤーを扱っているので、何らかの形でこれを動的に行う方法が必要だったので、匿名メソッドが必要でした。

anonymoua メソッド内に、(ILayer コンテキスト内の) 外側のループから ILayerEvents_Event を取得する ILayer 変数があるため、どのレイヤーを使用しているかがわかります。私が立ち往生しているのはこの時点です。機能は機能し、アプリケーションを終了するまですべてが壮大で、20 以上の参照がそこにぶら下がっていて、行く場所がなく、例外があります。

ユーザーが最後にレイヤーを非表示/表示する時期がわからないため、最後に物事を無効にする方法はありません。何も害がないように見えるので、そのままにしておくことができると思います(または、匿名メソッドよりもこれを行うためのより良い方法があるかもしれません)。何かが足りないと思うだけです。

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

c# - 匿名メソッドとデリゲート

BeginInvokeメソッドが匿名メソッドを受け入れない理由を理解しようとしています。

「匿名メソッド」から「System.Delegate」に変換できないと表示されますが、匿名メソッドをデリゲートにキャストすると機能しますか?