問題タブ [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.
c# - ライブラリが「Linq-something」または「something-Linq」と呼ばれるに値するのはいつですか?
エレガントな方法で式ツリーを構築する方法についてさらに知識を得ることを期待して、命名スキーマ「something-Linq」のライブラリの1つを見たところ、がっかりしました。私が見つけることができたのは、IEnumerable を拡張するメソッドだけだったからです。もちろん、「通常の」C# コードを使用します。
今、私はこの質問を持っています: IEnumerable の非式拡張は、ライブラリの名前に「Linq」を含めることを本当に正当化しますか? それとも、作者は IEnumerable 拡張ライブラリのダウンロード数を増やそうとして誇大広告に飛び乗っているだけで、ライブラリの名前に「Linq」が表示されているときに IQueryable と式を期待していたのは正しかったのでしょうか?
編集:
Linq-to-... と something-Linq ライブラリには違いがあると私は主張します。IMHO Linq-to-... は linq プロバイダー ライブラリであり、something-Linq は linq 拡張機能です。Linq プロバイダー ライブラリは、結果で IQueryable または IEnumerable を公開するかどうかを選択できると思います - linq 拡張機能にはその選択がありません。私に関する限り、それらは両方の種類のプロバイダ ライブラリで動作できる必要があります。つまり、すべての linq 拡張機能は、Queryable 拡張機能と Enumerable 拡張機能の両方を提供する必要があります。
編集2:
Jon と私の間で、彼の回答のコメントで非常に活発な議論が行われました。うまくいけば物事を明確にするためにブログ投稿を作成することを志願しました: LINQ の未知の海域のマッピング
編集3:
この議論に興味のある方は、ぜひ私のブログ記事にアクセスしてください。恐ろしいので投稿自体をスキップして、Jon による議論と説明に直行してください。
c# - Linq-To-Xml などを使用する場合の null 参照の処理
たとえば、LinqToXML を使用している場合など、(多くの) null 参照を処理するためのより良い/より短い方法はありますか?
私はそれを非常にうまく処理する XElement の拡張機能を書きましたが、別の方法があるのでしょうか?
そして、関数名はどうですか?「そして」は実際には説明的ではありません。
PS: この例で XPath を使用できることはわかっていますが、より複雑なケースでは常にそうとは限りません。
c# - C# 拡張メソッド - エスケープ文字も受け入れる文字列分割
.NET String クラスの拡張メソッドを書きたいと思います。Split メソッドの特別なバリエーションにしたいと思います。これは、エスケープ文字がセパレーターの前に使用されている場合に文字列が分割されないようにするためにエスケープ文字を使用するものです。
これを書く最良の方法は何ですか?私はそれにアプローチするための最良の非正規表現方法に興味があります。
みたいなサイン入りのやつ…
更新: コメントの1つで出てきたので、エスケープ...
C# で非特殊文字をエスケープすると、エラー - CS1009: 認識されないエスケープ シーケンスが発生します。
IE JScript では、エスケープ文字が破棄されます。\u を試してから「予期される 16 進数」エラーが発生しない限り。Firefox をテストしましたが、同じ動作をします。
私は、このメソッドがかなり寛容で、JavaScript モデルに従っていることを望みます。非区切り文字でエスケープする場合は、エスケープ文字を「親切に」削除する必要があります。
.net - System.Data.DataTableExtensions.CopyToDataTable() の欠陥に対処する方法
おそらく Extension メソッドの欠陥である何かに遭遇しました.CopyToDataTable
。
このメソッドは、(VB.NET で) インポートSystem.Data.DataTableExtensions
してから、IEnumerable に対してメソッドを呼び出すことによって使用されます。LINQ を使用して Datatable をフィルター処理し、最後に DataTable を復元する場合は、これを行います。
すなわち:
上記の例では、「WHERE」フィルタリングは結果を返さない可能性があります。これが発生した場合、DataRows がないため、CopyToDataTable は例外をスローします。
なんで?
正しい動作は、Rows.Count = 0 の DataTable を返すことです。
CopyToDataTable を呼び出す人がこの問題を意識する必要がないように、これに対する明確な回避策を考えられる人はいますか?
System.Data.DataTableExtensions は静的クラスであるため、動作をオーバーライドできません。何か案は?私は何かを逃しましたか?
アップデート:
これを問題としてConnectに提出しました。引き続きいくつかの提案をお願いしますが、私に同意する場合は、上記のリンクから Connect で問題に投票してください。
乾杯
c# - カスタム C# 拡張メソッドを参照するコンパイラ エラー
初めて拡張メソッドを作成しようとしていますが、問題が発生しています...多分あなたたちが助けてくれるでしょう:)
次に、「MyClass.myMethod」を実行すると、メソッドが存在しないというqコンパイラエラーが発生します...
何故ですか?
c# - C# 拡張メソッド アーキテクチャに関する質問
私は最近この質問をしました: カスタム C# 拡張メソッドを参照するコンパイラ エラー
Marc Gravell の回答は完璧で、私の問題を解決しました。でも、考えるきっかけになりました…
拡張メソッドを静的クラスに配置する必要があり、メソッド自体が静的でなければならない場合、静的な拡張メソッドを作成できないのはなぜですか?
「this」とマークされたパラメーターは、拡張するオブジェクトのインスタンスへのアクセスを許可するために使用されることを理解しています。私が理解していないのは、メソッドを静的に作成できない理由です...これは無意味な制限であるように思えます...
私の質問は、静的メソッドとして機能する拡張メソッドを作成できないのはなぜですか?
c# - リストを行うためのより速い方法.Contains()
「脱交差」と思われることをしようとしています (適切な名前が何であるかはわかりませんが、EpicGames の Tim Sweeney が古い UnrealEd で呼んだものです)
その後、元のデータから結果を差し引いて、どの要素を削除したかを確認します。.Except() を使用すると超高速なので、問題はありません。
どちらのリストにも (文字列の) ~30,000 の要素があると、これはかなりパフォーマンスが悪いため、これを行うためのより高速な方法が必要です。できれば、このステップとその後のステップを一気に行う方法が望ましいでしょう。.Contains() の代わりに .Exists() を使用してみましたが、少し遅くなります。少し太い気がしますが、.Except() と .Intersect() および/または .Union() の組み合わせで可能になると思います。
c# - String.IsNullOrBlank拡張メソッド
文字列フィールドを継続的にチェックして、nullまたは空白かどうかを確認します。
少し入力する手間を省くために、同じ効果を持つStringクラスの拡張メソッドを作成することは可能ですか?クラスインスタンスに拡張メソッドを追加する方法を理解していますが、静的拡張メソッドをクラスに追加するのはどうですか?
.net - 拡張メソッドの出現により、抽象クラスは魅力的ではなくなりましたか?
.NET の拡張メソッドの興味深い点の 1 つは、それらをインターフェイスに適用できることです。私にとっては、アセンブリを乱雑にする抽象クラスを定義することなく、インターフェイスの近くで機能を定義できることは素晴らしいことです。
抽象クラスが時代遅れなどではないことは知っていますが、コードでこの副作用を利用することについてどう思いますか?
例:
asp.net-mvc - HtmlHelper 拡張メソッド内での HtmlHelper メソッドへのアクセス - ASP.NET MVC RC2
ASP.NET MVC RC2 で HtmlHelper 拡張機能を構築しようとしています。このコードは Preview 5 では問題なく動作しましたが、RC2 では動作しなくなりました。その理由を理解しようとしています。コードは次のとおりです。
問題は、拡張メソッド内から htmlHelper のすべてのメソッドにアクセスできないことです。したがって、htmlHelper.DropDownList が見つかりません。
助言がありますか?