【发布时间】:2011-08-02 09:30:33
【问题描述】:
我知道有办法,但真的有好的办法吗?
目前我有一个不错的基于属性的框架,除了冗长之外,它运行良好:
public Variable<int> Value { get { return Get.Int(MethodBase.CurrentMethod()); } }
想象一下,* 几百(通常也有 setter)。有没有办法得到同样的结果但更简洁?
我考虑过:
public Variable<int> Value { get { return Get.Int("Value"); } }
并尝试过:
public Variable<int> Value { get { return Get.Int(() => Value); } }
但是由于这些变量有很多很多(我保证在这种疯狂中有方法)我担心第二个值(或字符串)与第一个不匹配而产生的模糊错误。
所以我的问题是,任何人都可以想出一种更简洁的方式来编写上述内容吗?我只需要当前的属性名称。
到目前为止,我最喜欢的“解决方案”是:
protected Func<MethodBase> Self = MethodBase.GetCurrentMethod;
public Variable<int> Value { get { return Get.Int(Self()); } }
看起来很短,甜美,漂亮。
但是,可惜的是,JIT 将规则作为一种选项排除在外。有没有办法可以用不同的名称在 C# 中重写 GetCurrentMethod?很遗憾 StackCrawlMark(我认为这是必需的)是 System 内部的。
或者,是否有任何与 ReSharper 兼容的工具,但也许让我通过护目镜查看代码,将冗长的 MethodBase.GetCurrentMethod 减少到更短更甜的东西,同时仍然编译完全相同? (我真的不希望有一个预编译摆弄步骤,但我愿意接受建议 - 将其全部简化为属性名称会很好)。
【问题讨论】:
标签: c# reflection properties