問題タブ [nameof]

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 投票する
4 に答える
1546 参照

c# - Object.GetType() もプロジェクト名を返す

ToString() をオーバーライドし、GetType() を使用して、使用されているオブジェクトの型を返そうとしています。情報を返していますが、名前空間が含まれています。問題は、どうすれば NameSpace を取り除き、オブジェクト名だけを表示できるかということです。これが私のコードです:

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

c# - nameof と typeof の違い

私が間違っている場合は修正してください。

まったく同じ出力が得られるはずです。このソースによると理解できる理由の 1 つ: https://msdn.microsoft.com/en-us/library/dn986596.aspxは、

「nameof を使用すると、定義の名前を変更するときにコードを有効に保つことができます」

クラスインスタンスを文字列として取得したい場合、そのようなことはできません:

ただし、次のようなことができます。

どちらの場合も (typeofおよびnameof) リファクタリングが可能であるため、nameof既存のものを実行するために、 などの別の上位レベルのキーワードを再発明する理由は他にありません。私がはっきりと見ていない違いはありますか?

最後に、誰かが の実装を確認するための参照ソースを教えていただければ幸いですnameof。リフレクションを使用していますか?

更新 1:ここ から取得

nameof文字列変数を宣言するのと同じくらい効率的です。反射も何もありません!

生成された MSIL をチェックアウトすると、ldstr 演算子を使用して文字列へのオブジェクト参照がスタックにプッシュされるため、文字列宣言と同等であることがわかります。

0 投票する
2 に答える
195 参照

c# - nameof を使用して C# でセッター メソッド名を取得する

nameofnew演算子を使用してセッター メソッド名を取得することは可能ですか?

うまくいくと思い GetType().GetMethod("set_" + nameof(Foo))ますが、もっと簡単なものはありますか?

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

c# - 型引数を指定せずにジェネリック クラスのメンバーで nameof を使用する

Bar の名前を に渡したいのですがType.GetMethod(string)。としてこれを行うことができますsomeType.GetMethod(nameof(Foo<int>.Bar))が、ここでintは完全に任意です。省略できる方法はありますか?残念ながら、うまくいきnameof(Foo<>.Bar)ません。

このおもちゃのケースではそれほど大したことではありませんが、複数の型パラメーターがあり、特にそれらにwhere制約が付加されている場合は、それらをすべて説明するのが面倒になる可能性があります。

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

c# - 静的フィールド初期化子で非静的フィールドの nameof を使用する

List<T>静的フィールドと非静的フィールドを持つクラスがあります。次に、このリストを次のようなオブジェクトで初期化したいと思います。

最初のFooオブジェクトの作成は正常に機能しますが、エラーが発生します

フィールド初期化子は、非静的フィールド、メソッド、またはプロパティ C.bar を参照できません

2番目に。

静的メンバーがインスタンス データにアクセスできないことは承知しています (この質問を参照してください)。しかし、私が理解している限りでnameofは、コンパイル時に評価され、メタデータのみにアクセスし、インスタンス データにはアクセスしません。では、なぜこれが機能しないのでしょうか。回避策はありますか?

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

c# - 設定のみのプロパティで「nameof」キーワードを使用する

私の関数では、IMediaPanelインターフェイスを実装するオブジェクトを受け取ります。

nameof初期化中に、C# 6.0キーワードを使用しているプロパティの名前を指定する必要があります。

これは問題なく機能しますが、次の式を使用します。

Visual Studio で次のエラーが表示されます。

プロパティ「MyNamespace.IMediaPanel.IsNextEntityExists」にはゲッターがありません。

「制限の名前」を検索しても、この問題についての答えは得られませんでした。さらに、公式の発言には、プロパティ ゲッターに関する制限が含まれていません。

... 以下は、エラーを生成することに言及する価値があります: 事前定義された型 (int または void など)、null 許容型 (Point?)、配列型 (Customer[,])、ポインター型 (Buffer*)、修飾エイリアス (A ::B)、バインドされていないジェネリック型 (Dictionary<,>)、前処理シンボル (DEBUG)、およびラベル (ループ:)。...

この制限がある理由と、それについての参照があるかどうかを誰かが説明できますか? nameofリフレクションを介して一般的な型情報を使用する必要があるのに、キーワードがプロパティのインスタンスゲッターを使用するように強制できる理由は何ですか? (少なくともこの特定のケースでは、不明な型のためにインスタンスのプロパティを直接指すことができない場合、このインスタンスがインターフェイスを実装していることを知っているだけです)

アップデート

コメントからの@Gusdorの提案が機能しない理由を説明するには、InitConnections関数を呼び出す方法を明確にする必要があります(簡略化された形式で):

そのため、 Initnameof(panelControl.IsNextEntityExists)関数内で使用すると、FrameworkElement にカスタム クライアントのプロパティが含まれていないため、エラーが発生します。また、 InitConnections関数内で同じ式を使用すると、getter に関するエラーが発生します - の場合と同じです。 IsNextEntityExistsnameof(IMediaPanel.IsNextEntityExists)

とにかく、私は答えを見つけました。この「ゲッター」エラーはReSharperのバグです(私自身の答えを参照してください)。

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

c# - この nameof() は本当に再帰呼び出しですか?

現在、C# で ConfigurationSection を作成しています。ハードコードされた文字列の代わりに nameof(PropertyName) を使用して、C# 6 の機能を利用することにしました。

ただし、再帰呼び出しについて Resharper から奇妙な結果が得られます。

次に例を示します。

再帰的な警告

プロパティが内部で参照されているため、この警告が表示される理由がわかります。ただし、これが実際に再帰的であるとは確信していません。

この電話で気をつけなければならないことはありますか?