【发布时间】:2011-06-22 08:54:57
【问题描述】:
好的,
这就是我正在做的,我有一个名为“设置”的类
Settings 有一个属性列表:
我正在尝试使其尽可能动态。
所以我可以复制并粘贴每个属性并更改其名称
它会按名称获取新设置
例子..
public string Url
{ get { return Get<string>(MethodBase.GetCurrentMethod()); } }
public int Port
{ get { return Get<int>(MethodBase.GetCurrentMethod()); } }
private T Get<T>(MethodBase method)
{
// Code that pulls setting from the property name
}
问题是,如何将属性类型传递给 Get,这样我就不必指定两次数据类型了..
我知道这是错误的,但有点像
Get<MethodBase.GetCurrentMethod().GetType()>(MethodBase.GetCurrentMethod());
【问题讨论】:
-
不是这个问题的答案 - 但我会强烈重新考虑这种方法。不仅代码几乎被无缘无故地混淆了(例如与
Get<int>("Port")相比),而且由于反射,性能会很差,并且在未来重构期间重命名属性可能会破坏您的代码,因为人们可能没有意识到属性名称被有效地使用字典键(参见之前关于混淆的 cmets)。 -
我这样做的主要原因是集中我获取设置的位置,而不是在整个项目中使用代码,如果我决定更改从哪里读取设置,它是这不是一场噩梦,我使用反射只是获取属性名称