如何从其访问器中获取属性的唯一标识符

时间:2012-05-02 09:22:11

标签: c# .net reflection

是否可以从其访问者中获取属性的唯一标识符?

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;
        ...

1 个答案:

答案 0 :(得分: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);