【发布时间】:2011-05-05 20:48:30
【问题描述】:
.NET 框架的各个部分都需要使用属性的字符串名称:
-
ArgumentException使用有问题的变量的名称 -
DependencyProperty使用它所支持的属性的名称 -
INotifyPropertyChanged使用刚刚更改的属性的名称。
填充这些参数的最简单方法似乎是对它们进行硬编码(即:new ArgumentNullException("myArg"))。这似乎过于脆弱,直到运行时您才会意识到重构破坏了关联。
使用反射来验证这些参数是我唯一想到的解决方案,但说验证直到只在运行时执行。
有没有更好的方法来定义成员与其名称之间的关系?将优先考虑简单而优雅的设计时执行。
【问题讨论】:
-
对于
INotifyPropertyChanged,有些人使用Expressions 对其属性进行强类型化,然后将它们适当地转换回字符串表示形式。见stackoverflow.com/questions/5780232/… -
这些通常被称为“魔术字符串”,而 IMO 是 .NET 中令人不安的趋势。 Silverlight 和 ASP.NET MVC 都非常依赖它们。有一些方法可以绕过它们(例如,我强烈推荐 BoltClock 的建议),但我希望 MS 能找到一种方法,一开始就不介绍它们。