問題タブ [callermembername]
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# - C# で「メンバーが割り当てられていません」という警告を抑制する
次のコードがあります。
ReactiveUI INPC サポートを使用します。Trochoid
コンパイラは、決して割り当てられず、常にnullになることを常に警告しています。RaiseAndSetIfChanged
ただし、サポートを通じて実行される魔法によりCallerMemberName
、コードは機能しますが、コンパイラは間違っています。
コードでこれらの警告をきれいに抑制するにはどうすればよいですか?
c# - MVVMCallerMemberNameと「マジックストリング」
新しいC#5.0リリースでは、INotifyPropertyChanged実装の「マジックストリング」を取り除くために次のようなものが導入されました。
これで、次のように書くことができます。
メソッド定義のCallerMemberNameが原因で可能です。
「マジックストリング」の方法よりもリファクタリングに適していて、ラムダ式よりも高速ですが、1つのセットアクセサーからOnPropertyChangedを複数回呼び出すにはどうすればよいのでしょうか。たとえば、次のようなものが必要な場合:
CallerMemberNameの方法でこれを行い、「マジックストリング」とラムダ式の使用を回避するにはどうすればよいですか?
また、IDataError情報で「マジックストリング」の使用を回避するにはどうすればよいのでしょうか。
私はMVVMを初めて使用するため、「マジックストリング」を処理するための巧妙な方法を見落とした可能性がありますが、調査を行っても何も見つかりませんでした。
c# - GetEnumerator のデフォルトの動作をオーバーライドする
への呼び出し方法を知る必要があるという要件がありますGetEnumerator()
。
私が考えることができる最善の方法は、デフォルトの動作をGetEnumerator
私が作成したものにオーバーライドするGetEnumerator([CallerMemberName]string caller = null)
ことです。
いくつかの呼び出しコードの例は次のとおりです。
目的は、たとえばメソッド"button1_click"
で知りたいことですGetEnumerator()
c# - 発信者情報属性がそのまま実装されるのはなぜですか?
現在の実装の欠点:
- 必要な場所でパラメーターを書き換える必要があるため、DRY の原則に違反しています。
- インターフェース実装の1つだけがそれらを必要とする場合でも、インターフェースにすでにこれらのパラメーターを指定する必要があるため、実装の非表示を台無しにします
- それらはインターフェースを汚し、ユーザーはオートコンプリートやドキュメントなどでそれらを目にします。
なぜ言語設計者は、次のようなもっと使いやすいものに反対することにしたのですか?
この実装にはいくつかの機能が欠けていると思います。たとえば、Foo() が IFoo を実装するクラスであり、IFoo が別のアセンブリにある場合、IFoo の呼び出し元はコンパイル時に情報が必要であることをどのように知る必要がありますか? 彼はそれを知ることができません。
しかし!現在の実装として使用できないものを生成するのではなく、これが 1 つの「ビルド ステップ」内でのみ機能することを文書化する方がよいのではないでしょうか?
Q1:現在のように実装されている理由についての公式ドキュメントはありますか?
Q2:他の言語でのより良い解決策を知っている人はいますか?
c# - .NET 4.0 の CallerMemberName が機能しない
CallerMemberName
BCL ポータビリティ パックを介して .NET 4.0 で属性を使用しようとしています。メンバー名ではなく、常に空の文字列を返します。私は何を間違っていますか?
c# - Get プロパティの WPF Notify PropertyChanged
をINotifyPropertyChanged
使用して実装しましたCallerMemberName
したがって、これは任意のプロパティのセッターで呼び出すことができます -OnPropertyChanged()
これは、設定されているときはいつでもプロパティ変更イベントを通知します。これは、getter のみのプロパティには当てはまりません。例えば、
OnPropertyChanged()
OnPropertyChanged("Age")
DateOfBirth では問題なく動作しますが、Age が変更されたことを通知するには、 のセッター内で呼び出すことを忘れないでくださいDateOfBirth
。これにより、コードを長期間維持することが難しくなっていると思います。新しいプロパティが Age に依存する場合は、DateOfBirth のセッターでも通知する必要があります。OnPropertyChanged("Age") を呼び出さずにこれを行うより良い方法はありますか?
c# - INotifyPropertyChanged を実装する場合、[CallerMemberName] は代替手段と比較して遅いですか?
を実装するためのさまざまな方法をINotifyPropertyChanged
提案する優れた記事があります。
次の基本的な実装を検討してください。
これを次のものに置き換えたいと思います。
しかし、時々、この属性は他の[CallerMemberName]
属性に比べてパフォーマンスが悪いと読むことがあります。それは本当ですか、なぜですか? リフレクションを使用していますか?
c# - クラス名の取得
class-name
での入手方法caller info attributes
。
strongly say a no
リフレクションを使用してクラス名をログに記録します。
以下のようなものを使用してメソッド名を取得できました[CallerMemberName]
:
Caller Info Attributesclass name
を使用してここにログを記録する方法は?