タグ付けされた質問 「extension-methods」

拡張メソッドは、Swift、Visual Basic.NET、C#などの一部の言語の言語機能です。拡張メソッドを使用すると、新しい派生型を作成したり、再コンパイルしたり、元の型を変更したりすることなく、既存の型にメソッドを「追加」できます。

16
文字列をnull許容型(int、doubleなど)に変換します
一部のデータ変換を実行しようとしています。残念ながら、データの多くは文字列であり、intやdoubleなどでなければなりません。 だから私が持っているものは次のようなものです: double? amount = Convert.ToDouble(strAmount); このアプローチの問題は、strAmountが空の場合、空の場合はnullにしたいので、データベースに追加すると、列がnullになります。だから私はこれを書いてしまいました: double? amount = null; if(strAmount.Trim().Length>0) { amount = Convert.ToDouble(strAmount); } これで問題なく動作しますが、コードが1行ではなく5行になりました。これにより、特に変換する列が大量にある場合は、読み取りが少し難しくなります。 文字列クラスとジェネリックの拡張を使用して型を渡すと思いましたが、これはdouble、int、またはlongの可能性があるためです。だから私はこれを試しました: public static class GenericExtension { public static Nullable<T> ConvertToNullable<T>(this string s, T type) where T: struct { if (s.Trim().Length > 0) { return (Nullable<T>)s; } return null; } } しかし、エラーが発生します:タイプ「string」を「T」に変換できませんか? これを回避する方法はありますか?ジェネリックスを使用してメソッドを作成することにはあまり慣れていません。

13
(C#で)文字列を「乗算」できますか?
たとえば、文字列があるとします。 string snip = "</li></ul>"; 整数値にもよりますが、基本的に複数回書きたいです。 string snip = "</li></ul>"; int multiplier = 2; // TODO: magic code to do this // snip * multiplier = "</li></ul></li></ul>"; 編集:私はこれを実装するために自分の関数を簡単に書くことができることを知っています、私が知らなかった奇妙な文字列演算子があったのかと思っていました

2
Goの既存の型に新しいメソッドを追加する方法は?
gorilla/muxRouteおよびRouterタイプに便利なutilメソッドを追加したいと思います。 package util import( "net/http" "github.com/0xor1/gorillaseed/src/server/lib/mux" ) func (r *mux.Route) Subroute(tpl string, h http.Handler) *mux.Route{ return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) } func (r *mux.Router) Subroute(tpl string, h http.Handler) *mux.Route{ return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) } しかし、コンパイラは私に通知します 非ローカルタイプのmux.Routerでは新しいメソッドを定義できません それで、どうすればこれを達成できますか?匿名のmux.Routeフィールドとmux.Routerフィールドを持つ新しい構造体タイプを作成しますか?または、他の何か?

1
拡張メソッドをインターフェイスに適用できますか?
拡張メソッドをインターフェースに適用することは可能ですか?(C#の質問) たとえば、次のことを実現します。 ITopologyインターフェイスを作成する このインターフェイスの拡張メソッドを作成します(例:public static int CountNodes(this ITopology topologyIf)) 次に、ITopologyを実装するクラス(MyGraphなど)を作成すると、自動的にCount Nodes拡張機能が追加されます。 このようにして、インターフェースを実装するクラスは、拡張メソッドで定義されたものに合わせるためにセットのクラス名を持つ必要はありません。

8
コレクションへのAddRange
同僚から本日、コレクションに範囲を追加する方法を尋ねられました。彼はから継承するクラスを持っていCollection<T>ます。そのタイプのget-onlyプロパティがあり、すでにいくつかのアイテムが含まれています。別のコレクションのアイテムをプロパティコレクションに追加したいと考えています。どのようにしてC#3フレンドリーな方法でこれを行うことができますか (取得専用プロパティに関する制約に注意してください。これにより、Unionの実行や再割り当てなどの解決策が妨げられます。) 確かに、プロパティのforeachです。追加は機能します。ただし、- List<T>スタイルのAddRangeの方がはるかにエレガントです。 拡張メソッドを書くのは簡単です: public static class CollectionHelpers { public static void AddRange<T>(this ICollection<T> destination, IEnumerable<T> source) { foreach (T item in source) { destination.Add(item); } } } でも、ホイールを再発明しているような気がします。System.Linqまたはmorelinqで類似するものは見つかりませんでした。 悪いデザイン?追加を呼び出すだけですか?明らかなものがない?

9
C#拡張メソッドでクラスを拡張するにはどうすればよいですか?
クラスに拡張メソッドを適用できますか? たとえば、DateTimeを拡張して、次のように呼び出すことができるTomorrow()メソッドを含めます。 DateTime.Tomorrow(); 私は使用できることを知っています static DateTime Tomorrow(this Datetime value) { //... } または public static MyClass { public static Tomorrow() { //... } } 同様の結果が得られますが、DateTime.Tomorrowを呼び出せるようにDateTimeを拡張するにはどうすればよいですか?

4
C#でクラスメソッドを拡張メソッドでオーバーライドする方法はありますか?
拡張メソッドでクラスのメソッドをオーバーライドしたい場合がありました。C#でそれを行う方法はありますか? 例えば: public static class StringExtension { public static int GetHashCode(this string inStr) { return MyHash(inStr); } } これを実行したかったのは、文字列のハッシュをデータベースに保存し、文字列クラスのハッシュを使用するすべてのクラス(つまり、Dictionaryなど)で同じ値を使用できるようにするためです。組み込みの.Netハッシュアルゴリズムは、フレームワークの1つのバージョンから次のバージョンへの互換性が保証されていません。独自のものに置き換えたいと思います。 文字列クラスやGetHashCodeメソッドだけに限定されるのではなく、拡張メソッドでクラスメソッドをオーバーライドしたい場合もあります。 既存のクラスをサブクラス化してこれを実行できることはわかっていますが、多くの場合、拡張機能を使用してこれを実行できると便利です。

5
Active Supportコア拡張の使用方法
Active Support 3.0.3とRails 3.0.3 with Ruby 1.8.7をインストールしています。 使おうとする1.week.agoと NoMethodError: undefined method 'week' for 1:Fixnum from (irb):2 他のコア拡張は機能しているようです。友人のコンピューターで試してみました(インストールスペックとレガシーバージョンは同じです)が同じ結果になりました。 何ができますか? これはすべてIRBにあります。

2
「フォールド」LINQ拡張メソッドはどこにありますか?
MSDNのLinqサンプルで、使用したいFold()と呼ばれるきちんとしたメソッドを見つけました。彼らの例: double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 }; double product = doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor); 残念ながら、私はこれを彼らの例でも自分のコードでもコンパイルすることができず、このメソッドについて言及しているMSDNの他の場所(EnumerableまたはArray拡張メソッドなど)を見つけることができません。私が得るエラーは、単純な古い「それについて何も知らない」エラーです: error CS1061: 'System.Array' does not contain a definition for 'Fold' and no extension method 'Fold' accepting a first argument of type 'System.Array' could be found (are you missing a …


5
文字列などのC#の組み込み型を拡張する方法
皆さん、こんにちは...私はする必要がTrimありますStringます。しかし、文字列の最後や最初だけでなく、文字列自体の中で繰り返される空白をすべて削除したいと思います。私は次のような方法でそれを行うことができます: public static string ConvertWhitespacesToSingleSpaces(string value) { value = Regex.Replace(value, @"\s+", " "); } ここから得たもの。しかし、私はこのコードの一部がString.Trim()それ自体のので、Trimメソッドを拡張、オーバーロード、またはオーバーライドする必要があると思います...それを行う方法はありますか? 前もって感謝します。

30
拡張メソッドのどのような利点を見つけましたか?[閉まっている]
現在のところ、この質問は私たちのQ&A形式には適していません。回答は事実、参考資料、または専門知識によって裏付けられることを期待していますが、この質問は、討論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてガイダンスを入手してください。 7年前に閉鎖されました。 C#の「非信者」は、拡張メソッドの目的は何かと私に尋ねていました。特に、元のオブジェクトのソースを所有/制御していない場合は、すでに定義されているオブジェクトに新しいメソッドを追加できることを説明しました。 彼は「なぜあなた自身のクラスにメソッドを追加しないのですか?」と提起しました。私たちは(良い意味で)ぐるぐる回っています。私の一般的な反応は、それがツールベルトの別のツールであり、彼の反応はそれがツールの無駄な無駄であるということです...しかし、私はもっと「啓発された」答えが得られると思いました。 自分のクラスに追加されたメソッドを使用できなかった(または使用すべきではなかった)拡張メソッドを使用したシナリオは何ですか?

2
JavaScriptで拡張メソッドを作成するにはどうすればよいですか?
JSでいくつかの拡張メソッドを書く必要があります。私はC#でこれを行う方法を知っています。例: public static string SayHi(this Object name) { return "Hi " + name + "!"; } その後、によって呼び出されます: string firstName = "Bob"; string hi = firstName.SayHi(); JavaScriptでこのようなことをするにはどうすればよいですか?

8
Swift拡張の例
私はもともとこのようなものを作る方法を知りたいと思っていました UIColor.myCustomGreen 自分の色を定義して、アプリ全体で使用できるようにします。 私は以前に拡張機能を研究したことがあり、おそらくそれらを使用して問題を解決できると思いましたが、拡張機能の設定方法を正確に思い出せませんでした。この記事の執筆時点でGoogleで「Swiftextension」を検索すると、ドキュメント、いくつかの長いチュートリアル、そしてかなり役に立たないStackOverflowの質問が見つかりました。 したがって、答えはそこにありますが、ドキュメントとチュートリアルを掘り下げる必要があります。Stack Overflowにいくつかのより良い検索キーワードを追加し、拡張機能の設定方法を簡単に復習するために、この質問と次の回答を書くことにしました。 具体的に私は知りたかった: 拡張機能はどこにありますか(ファイルと命名規則)? 拡張構文とは何ですか? いくつかの簡単な一般的な使用例は何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.