我想通过反射机制获取属性名称。是否可以?

更新:
我有这样的代码:

    public CarType Car
    {
        get { return (Wheel) this["Wheel"];}
        set { this["Wheel"] = value; }
    }

并且因为我需要更多这样的属性,所以我想做这样的事情:
    public CarType Car
    {
        get { return (Wheel) this[GetThisPropertyName()];}
        set { this[GetThisPropertyName()] = value; }
    }

最佳答案

由于属性实际上只是方法,因此您可以执行此操作并清理返回的get_:

class Program
    {
        static void Main(string[] args)
        {
            Program p = new Program();
            var x = p.Something;
            Console.ReadLine();
        }

        public string Something
        {
            get
            {
                return MethodBase.GetCurrentMethod().Name;
            }
        }
    }

如果分析性能,则应该发现MethodBase.GetCurrentMethod()比StackFrame快几英里。在.NET 1.1中, Release模式下的StackFrame也会出现问题(从内存来看,我发现它快了3倍)。

话虽如此,我确信性能问题不会引起太大的问题-尽管关于StackFrame慢度的有趣讨论可以是found here

我猜如果您担心性能的话,另一个选择是创建一个Visual Studio Intellisense代码段,该代码段为您创建属性,并创建一个与属性名称相对应的字符串。

10-01 03:04
查看更多