問題タブ [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 投票する
3 に答える
425 参照

c# - 「破壊的な」文字列メソッドを Ruby 風にする方法はありますか?

Ruby では、オブジェクトを変更するメソッドの最後に感嘆符があります。string.downcase!

C# では、次のことを行う必要があります。foo = foo.ToLower()

次のような拡張メソッドを作成する方法はありますか:

foo.ConvertToLower()

それは操作しfooますか?

ref this(文字列は不変であり、拡張メソッドでa を実行できないため、答えはノーだと思います。)

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

powershell - Powershell v2 で拡張メソッドを使用する簡単な方法はありますか

バックグラウンド

この投稿では、Powershell で拡張メソッドを使用する方法について説明します

http://community.bartdesmet.net/blogs/bart/archive/2007/09/06/extension-methods-in-windows-powershell.aspx

これを誰かが C# で行っていることと比較してください。「someAssembly を使用する」を追加すると、すべての拡張メソッドが読み込まれます。

私の質問

これは Powershell 2.0 でよりシンプルになりましたか。もしそうなら、Powershell 2.0 で拡張メソッドを使用するにはどうすればよいでしょうか? 公開されているドキュメントを確認し、CTP をインストールしましたが、何も役に立ちません。

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

ruby - 実行時にRubyメソッドでメタデータを取得/設定するための最良の戦略は何ですか?

私はいくつかのメソッドを持つクラスを持っています。supersekret ですが、ここでできることを再現しました。

実行時に、メソッドの 1 つについてクラスに問い合わせて、次のようにハッシュまたは構造体を受け取ることができるようにしたいと考えています。

これを行う最善の方法は何ですか?もちろん、別々の YAML ファイルを横に置いて、2 つを関連付ける規則を設定することもできますが、コードとメタデータを 1 か所にまとめることが理想的です。

私が思いつく最も有望なアイデアは、次のようなものです。

誰かがより良いアイデアを持っていますか?私は非常に間違った木を吠えていますか?

0 投票する
10 に答える
59524 参照

c# - 拡張メソッド/LINQ のあいまいさの解決

ReSharper 4用のアドインを作成しています。このために、いくつかの ReSharper のアセンブリを参照する必要がありました。アセンブリの 1 つ (JetBrains.Platform.ReSharper.Util.dll) にはSystem.Linq名前空間が含まれており、拡張メソッドのサブセットは System.Core によって既に提供されています。

コードを編集すると、これらの拡張機能の間にあいまいさが生じて、OrderByたとえば を使用できなくなります。どうすればこれを解決できますか?ReSharper のものではなく、コアLINQ拡張機能を使用したいと考えています。

コンパイルしようとすると、次のエラーが発生します。

次のメソッドまたはプロパティ間で呼び出しがあいまいです: ' System.Linq.Enumerable.OrderBy<string,int>(System.Collections.Generic.IEnumerable<string>, System.Func<string,int>)' and 'System.Linq.Enumerable.OrderBy<string,int>(System.Collections.Generic.IEnumerable<string>, System.Func<string,int>)'

編集:残念ながら運が悪いので、以下の提案を試しました。その間、への参照を削除して問題を「解決」しましたSystem.Core。このようにして、ReSharper DLL ファイルによって提供される拡張機能を使用できました。

必要な ReSharper DLL ファイルをインポートしたサンプル プログラムをアップロードしました。のエイリアスを に変更しSystem.Core、ディレクティブをSystemCore追加しましたextern aliasが、それでも機能しませんでした。何か見逃した場合は、お知らせください。PS参照は、のデフォルトディレクトリにインストールされたReSharper v4.1 DLLファイルです"C:\Program Files\JetBrains\ReSharper\v4.1\..."

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

.net - 拡張メソッドからの ArgumentNullException または NullReferenceException?

拡張メソッドが null インスタンスで呼び出された場合 (拡張メソッドがそれを許可していない場合) にスローするのに最適な例外の種類は何だと思いますか? 拡張メソッドは静的メソッドに過ぎないので、ArgumentNullException であるべきだと主張することもできますが、一方でインスタンス メソッドのように使用されるため、NullReferenceException を使用する方が自然かもしれません。次の例を見てみましょう。

このようにして、値パラメーターが null の場合、NullReferenceException がスローされます。

他の例は次のようになります。

編集: いくつかの回答では、拡張メソッドを静的メソッドのように呼び出すことができ、その場合、null 参照例外が間違っていることを指摘しました。これは素晴らしい点であり、実際に私の懸念の 1 つですが、理由はわかりませんそもそも質問でそれを言うのを忘れていました。

また、誰かが NullReferenceException をスローするのは間違っていると指摘しましたが、そうです。メソッドを保護せずに、発生させます (CLR にスローさせます)。

私は ArgumentNullException を支持していると思います (これは私がこれまで使用してきたものです) が、メソッドが使用されるほとんどの場所でより自然に見えるため、少なくとも NullReferenceException に反対する余地があると思います。

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

asp.net-mvc - MVC ヘルパー拡張

文字列に下線が引かれた「Expected class, interface, enum or struct」というエラーが表示されるのはなぜですか?

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

c# - プロパティの名前を変更する方法としての拡張メソッド

一部のクラスには URL と呼ばれる醜いフィールドがありますが、ID ではなくファイルと呼びます。

setFile を使用せずにファイルをプロパティのように動作させる方法はありますか?

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

.net - 公式の LINQ 拡張メソッド

.NET 3.5 では、大量の拡張メソッドがコードのコア ベースに追加されました。MSDN では、IEnumerable<> などに拡張メソッドに関するセクションが追加されていることに気付きました。

参照用に追加されたすべての拡張メソッドのリストはありますか?

編集 回答ありがとうございますが、独立したタイプごとのMSDN記事へのリンクだけでなく、完全なリストを探しています。完全なリストを探しています。

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

c# - 静的数学メソッドをどのように拡張しますか(または拡張できますか)?

C#3.0では、「this」という命名法を使用してメソッドを拡張できることを私は知っています。

新しいクラスを含めるためにMath.Cos(ダブルラジアン)を拡張しようとしています。既存のクラスで「Cos」メソッドを作成できることは知っていますが、演習のためにこれをどのように/実行できるかを知りたいだけです。

いくつかの新しいことを試した後、入力を得るためにSOに戻ります。私は立ち往生しています。

これが私がこの時点で持っているものです...

0 投票する
30 に答える
45664 参照

c# - 拡張メソッドのどのような利点を見つけましたか?

C#の「非信者」は、拡張メソッドの目的は何であるかを私に尋ねていました。特に、元のオブジェクトのソースを所有/制御していない場合は、すでに定義されているオブジェクトに新しいメソッドを追加できることを説明しました。

彼は「自分のクラスにメソッドを追加してみませんか?」と提起しました。私たちは(良い意味で)ぐるぐる回っています。私の一般的な反応は、それがツールベルトの別のツールであり、彼の反応はそれがツールの無駄な無駄であるということです...しかし、私はもっと「啓発された」答えが得られると思いました。

自分のクラスに追加されたメソッドを使用することができなかった(または使用すべきではなかった)拡張メソッドを使用したシナリオにはどのようなものがありますか?