3

アクセサ内からプロパティの一意の識別子を取得することは可能ですか?

class Foo
{
    int Bar
    {
        set
        {
            string nameOfThisProperty = X; // where X == "Bar" or any unique value
        }
    }
}

もしそうなら、どのように?

更新

私が尋ねている理由は次のとおりです。現在行っているように自分で宣言する必要がないように、コードが実行されているプロパティを識別する一貫した一意の値が必要です。

Dictionary<string, RelayCommand> _relayCommands 
    = new Dictionary<string, RelayCommand>();

public ICommand SomeCmd
{
    get
    {
        string commandName = "SomeCmd";
        RelayCommand command;
        if (_relayCommands.TryGetValue(commandName, out command))
            return command;
        ...
4

1 に答える 1

2

リフレクションを使用できます:

[MethodImpl(MethodImplOptions.NoInlining)]
set
{
    string name = MethodBase.GetCurrentMethod().Name;
    // TODO: strip the set_ prefix from the name
}

コメント セクションで指摘されているように、setter はインライン化される可能性がある[MethodImpl]ため、JITer がそうしないように属性で装飾する必要があります。

またset_、名前が等しいため、メソッド名からプレフィックスを削除する必要がありますset_Bar

そう:

string name = MethodBase.GetCurrentMethod().Name.Substring(4);
于 2012-05-02T09:25:25.513 に答える