問題タブ [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.

0 投票する
17 に答える
227370 参照

c# - 既存の静的クラスに拡張メソッドを追加できますか?

私はC#の拡張メソッドのファンですが、などの静的クラスに拡張メソッドを追加することに成功していませんConsole

たとえば、Console' WriteBlueLine'という拡張子をに追加したい場合は、次のようにします。

Console''パラメータとしてローカルのパブリック静的メソッドを追加してこれを試しましたthis...しかしサイコロはありません!

WriteBlueLineこれは' 'メソッドを追加しませんでしたConsole...私はそれを間違っていますか?それとも不可能なものねだり?

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

c# - C# でミックスインを実装することは可能ですか?

拡張メソッドで可能だと聞いたことがありますが、自分ではよくわかりません。できれば具体例を示していただきたいです。

ありがとう!

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

c# - C#4 の dynamic キーワードは拡張メソッドをサポートしますか?

C#4のキーワードについての話を聞いていて、疑問に思っているのですが... この機能は他の .NET 機能と直交するものでしょうか? たとえば、拡張メソッドをサポートするのでしょうか?dynamic


注:この質問は、C#4 が出荷される前に尋ねられたものです。そのため、未来形で表現されています。

0 投票する
150 に答える
131087 参照

c# - C# のお気に入りの拡張メソッドは何ですか? (codeplex.com/extensionoverflow)

優れたお気に入りの拡張メソッドを投稿する回答のリストを作成しましょう。

要件は、完全なコードと、その使用方法に関する例と説明を投稿する必要があることです。

このトピックへの高い関心に基づいて、Codeplexで extensionoverflow というオープン ソース プロジェクトをセットアップしました。

Codeplex プロジェクトにコードを配置することを承認して、回答をマークしてください。

リンクではなく、完全なソースコードを投稿してください。

Codeplex ニュース:

2010 年 8 月 24 日 Codeplex のページができました: http://extensionoverflow.codeplex.com/

11.11.2008 XmlSerialize / XmlDeserialize実装され、単体テストが行​​われました。

2008 年 11 月 11 日 まだ開発者を増やす余地があります。;-)今すぐ参加しましょう!

11.11.2008 3 人目の貢献者がExtensionOverflowに参加しました。BKristensenへようこそ

2008 年 11月 11 日 FormatWithが実装され、単体テストが行​​われました。

09.11.2008 2 人目の貢献者がExtensionOverflowに参加しました。チャクリットへようこそ。

09.11.2008 より多くの開発者が必要です。;-)

2008年 9 月 11 日ThrowIfArgumentIsNull実装され、Codeplexで単体テストが行​​われました。

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

c# - C#でクラスに拡張メソッドを作成するには?

System.String の静的メソッドとして表示される文字列の拡張メソッドを作成したいと思いますが、うまくいきませんでした。

それは可能ですか?もしそうなら、どのように?ありがとう!

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

.net - 列挙拡張メソッド

vs2008 では、任意の列挙に適用される拡張メソッドを作成することは可能ですか。

特定の列挙に対して拡張メソッドを記述できることは知っていますが、単一の拡張メソッドを使用してすべての列挙を実行できるようにしたいと考えています。これは可能ですか?

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

c# - IEnumerable の拡張メソッドを定義するIEnumerable を返します?

IEnumerable<T>を返す拡張メソッドを定義するにはどうすればよいIEnumerable<T>ですか? 目標は、拡張メソッドをすべてのIEnumerableユーザーが利用できるようにすることと、匿名型を使用できるIEnumerable<T>場所を作成することです。T

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

c# - 拡張メソッドの構文とクエリの構文

標準のlinqキーワードまたはラムダ式でのlinq拡張メソッドを使用するのに良い時期があるかどうかを把握しようとしています。彼らは同じことをしているようですが、書き方が違うだけです。それは純粋にスタイルの問題ですか?

これらは、2番目の例がもう少し簡潔であるのと非常に似ていますが、=>が何をしているのかわからない場合は、おそらく表現力が低下します。

簡潔なコードを書く以外に、LINQ構文とは対照的に拡張メソッドを使用することには他の利点がありますか?

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

architecture - 拡張メソッドの使用法 - これは悪い設計ではありませんか?

.NET 3.5 を検討し始めたばかりなので、この種の質問が以前に行われたことがある場合はご容赦ください。suteki shop から MVC e コマース製品をダウンロードしたばかりなので、拡張メソッドの適切な使用法に苦労しています。このプロジェクトには、IRepository を拡張する非常に標準的なリポジトリ パターンがあります。

このインターフェースによって公開される基本機能を拡張するために、拡張メソッドが使用されます。

これで問題ありませんが、インターフェイスは、私が考える限り、それらを実装するオブジェクトへのコントラクトとして機能します。

リポジトリがインターフェース化されているという事実は、データ層にとらわれないアプローチの試みを示唆しています。とはいえ、独自のデータ レイヤーを作成する場合、リポジトリ クラスを実装するクラスに対する契約上の要件を確実に満たすために、どの拡張メソッドを作成する必要があるかについて混乱するでしょう。

IRepository を作成してから拡張する古い方法では、必要なものの可視性が大幅に向上するようです。

だから私の質問は、この拡張メソッドの使用は他の人にとって間違っているように見えるのでしょうか? そうでない場合、なぜですか?私はこれについてうめき声を上げるべきではありませんか?

編集:

上記の例は、拡張メソッドが非常に役立つ理由の良い例のようです。

私の問題は、データ アクセス メカニズム アセンブリの拡張メソッドでデータ アクセス固有の実装が動かなくなった場合だと思います。

そうすれば、別のメカニズムに交換する場合、そのアセンブリで同様の拡張メソッドを作成する必要があります。

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

c# - VS2008 と IIS6 で異なる C# キャスト

列挙型の値をタイプ別にドロップダウン リストに追加する C# コードがあります。列挙型である T1 で呼び出す必要がありますが、列挙型はこれが不可能な特殊なケースであるため、これを型制約として指定することはできません。これは内部でのみ使用され、文書化されているため、大きな懸念事項ではありません。

Description は System.Enum の拡張機能であり、列挙型の値の DescriptionAttribute の値、または値が指定されていない場合は ToString の値を返します。

このため、LINQ ステートメントの Cast 部分で System.Enum にキャストする必要があり、T1 にキャストしないと、Description 拡張機能を使用できません。

これは問題なく、Visual Studio 2008 の Web 開発サーバーでは機能しますが、IIS 6 で実行するとキャスト例外で失敗します。ASP ページを設定するための型パラメーターとして変更されず、ハードコードされた列挙型を使用して実行されます。

System.InvalidCastException: '%namespace.class+nameofenum%' から 'System.Enum' へのキャストが無効です。System.Convert.DefaultToType (IConvertible 値、型 targetType、IFormatProvider プロバイダー) で System.Convert.ChangeType (オブジェクト値、型 conversionType、IFormatProvider プロバイダー) で System.Linq.Enumerable.d__b0 1.MoveNext() at System.Linq.Enumerable.<SelectIterator>d__d2.MoveNext() で System.Linq。1..ctor(IEnumerableAddEnum[T1](DropDownList me) で System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 ソース) でバッファ1 ソース)

(名前空間/クラス名は私によって隠されています)

他のバージョンの IIS でテストすることはできませんが、開発バージョンが運用システムと一致しないのは非常に奇妙に思えます。これがなぜなのか誰か知っていますか?