問題タブ [extension-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.
.net - ソリューション スコープで .NET 拡張メソッドを定義する
私は現在、定期的に使用している「ヘルパー」スタイルの拡張メソッドをいくつか持っています(それらはほとんどが非常にシンプルで直感的であり、悪ではなく善のために機能するため、これを使用するかどうかについての議論に陥らないでください)。 )。これらは、コア .NET CLR クラスを大幅に拡張しています。
現在、拡張メソッドを保持する 'ExtensionMethods.cs' ファイルをソリューション内の新しいプロジェクトごとにコピーして、それらを複数のプロジェクトで使用できるようにする必要があります。
ソリューション内の複数のプロジェクトで動作するように拡張機能を定義することは可能ですか?それとも、それらを「拡張機能」DLL にラップすることはできますか?それともプロジェクトの範囲に限定されますか?
編集「専用プロジェクト」の回答は完全に有効ですが、彼が提供するアプローチを好むため、マルキシダードを選択しました。これまでのすべての回答に感謝します。すべて良い回答だったので、すべてアップモッドしました。
c# - C# 拡張メソッドによる演算子のオーバーロード
StringBuilder
拡張メソッドを使用して、演算子のオーバーロードを C#クラスに追加しようとしています。具体的には、与えられたに対して、と同等になりStringBuilder
sb
たいです。sb += "text"
sb.Append("text")
の拡張メソッドを作成するための構文は次のとおりですStringBuilder
。
blah
に拡張メソッドを正常に追加しますStringBuilder
。
残念ながら、演算子のオーバーロードは機能していないようです:
他の問題の中でも特に、キーワードthis
はこのコンテキストでは許可されていません。
拡張メソッドを介して演算子のオーバーロードを追加できますか? もしそうなら、それについて行く適切な方法は何ですか?
c# - C# で拡張メソッドを使用するとエラーが発生する
3.0 フレームワークにバグがあると思わせる問題に遭遇しました。拡張メソッドを使用しようとすると、次のエラーが発生します。
この単純なコードを使用する場合:
このコンパイル エラーを解消する唯一の方法は、次のコードを追加することです。
拡張メソッドを使用してから数か月が経ちましたが、これを行う必要はなかったと確信しています。他の誰かがこの問題に遭遇しましたか?
c# - VB コードで C# 拡張メソッドを呼び出す方法
C# で記述されたいくつかの拡張メソッドを含むクラス ライブラリと、VB で記述された古い Web サイトがあります。
VB コードから拡張メソッドを呼び出したいのですが、それらが intelisense に表示されず、サイトにアクセスするとコンパイル エラーが発生します。
同じ名前空間に含まれる他のクラスが Intelisense で正常に表示されるため、必要なすべてのImportを取得しました。
助言がありますか
編集:いくつかのコメントに役立つ詳細情報。
私の実装は次のようになります
そして、このような私の使用法
extension-methods - Container.DataItem の拡張メソッド出力?
そのため、ListView でループして順序付けされていないリストにするビジネス エンティティの IList があります。プレゼンテーション層で、このエンティティに拡張メソッドを作成しました。コード ビハインドでは、この拡張メソッドの結果を Response.Write できますが、ListView からアクセスしようとするとエラーが発生します。メソッドは IsCurrent と呼ばれ、ブール値を返します...これが私のコードです:
私が得るエラーは次のとおりです。ディレクティブまたはアセンブリ参照を使用していますか?)
ただし...コードビハインドからこのタイプのコードを実行してもエラーは発生しません:
asp.net-mvc - HtmlHelper 拡張機能が機能しないのはなぜですか?
ASP.Net MVC Web サイトを構築しています。1 つのプロジェクトにすべてを含めるのではなく、Web、モデル、およびコントローラーを、相互に参照する同じソリューション内の異なるプロジェクトに分離することにしました。
参照は次のようになります。
Web ---[参考文献]---> コントローラ ---[参考文献]---> モデル
ここで、HtmlHelper クラスに 2 つのカスタム メソッドを追加したいと考えました。これらは「IncludeScript」と「IncludeStyle」と呼ばれます。それぞれ単一の文字列パラメータを取り、それぞれスクリプトまたはリンク タグを生成します。
Web のドキュメントに従ってエクステンダー クラスを作成し、2 つのメソッドを記述してアプリケーションをコンパイルしました。
ここで、Public.Master ページ (メインのマスター ページであり、これらのメソッドを使用する予定の場所の 1 つ) に移動すると、次のようなコードを入力できます。
<%= Html.IncludeScript("\js\jquery.js") %>
IntelliSense は、IncludeScript メソッドを取得して、問題なく構文を表示します。だから私はすべてがうまくいくはずだと思っています。
しかし、そうではありません。
すべてがコンパイルされますが、アプリケーションを実行するとすぐに、Default.aspx.cs の 14 行目から次の実行時エラーが発生します。
c:\\Projects\\PhoneReel\\PhoneReel.Web\\Views\\Shared\\Public.Master(11): error CS0117: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'IncludeScript'
エラーが発生するコード行は次のとおりです。
httpHandler.ProcessRequest(HttpContext.Current);
ここで何がうまくいかないのでしょうか?
c# - C# 拡張機能
私は通常、拡張メソッドを非常に控えめに使用します。どうしても拡張メソッドを書かなければならないと感じたときは、メソッドをオーバーロードしたくなることがあります。私の質問は、他の拡張メソッドを呼び出す拡張メソッドについてどう思いますか? 悪い習慣?それは間違っているように感じますが、その理由を本当に定義することはできません.
たとえば、2 番目の CaselessIs メソッドは最初のメソッドを呼び出します。
これをしない方が適切でしょうか?欠点は、DRY に違反していることです。
c# - 拡張メソッドで C# イベントを発生させる - それは悪いことですか?
C# のイベント宣言の恐ろしさはよく知られています。スレッドセーフを確保するために、標準では次のように記述します。
最近、このボードの他の質問 (今は見つかりません) で、このシナリオでは拡張メソッドをうまく使用できると誰かが指摘しました。これを行う1つの方法は次のとおりです。
これらの拡張メソッドを配置すると、イベントを宣言して発生させるために必要なのは、次のようなものだけです。
私の質問: これは良い考えですか? 標準の On メソッドがないことで何か不足しているのでしょうか? (私が気づいたことの 1 つは、明示的な追加/削除コードを持つイベントでは機能しないことです。)
c# - 「null」参照 (つまり、サブスクライバーのないイベント) で拡張メソッドを呼び出すのは悪ですか?
悪か悪か?
拡張メソッドの性質上、MyButtonClicked が null の場合、MyButtonClicked.Raise は NullReferenceException をスローしないことに注意してください。(たとえば、MyButtonClicked イベントのリスナーはありません)。
悪かどうか?
c# - 型配列に拡張メソッドを記述できますか?
byte[] に拡張メソッドを記述する必要があります。それは可能ですか?