我想通过反射机制获取属性名称。是否可以?
更新:
我有这样的代码:
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代码段,该代码段为您创建属性,并创建一个与属性名称相对应的字符串。