是否有好的方法来获取当前属性名



我知道有很多方法,但是真的有好的方法吗?

目前我有一个体面的基于属性的框架,它工作得很好,除了冗长的:

public Variable<int> Value { get { return Get.Int(MethodBase.CurrentMethod()); } }

想象一下,*几百(通常也有设置器)。有没有办法得到同样的结果,但更简洁?

我认为:

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 kill排除了这个选项。也许有一种方法,我可以重写GetCurrentMethod在c#中,在不同的名称下?这是一个遗憾的StackCrawlMark(我认为是必需的)是内部的系统。

或者,是否有任何工具可以与ReSharper兼容,但可能让我通过护目镜查看代码,减少冗长的MethodBase。GetCurrentMethod到更短更甜的东西,同时仍然编译完全相同?(我真的不希望有预编译的繁琐步骤,但我愿意听取建议-将其全部简化为属性名称将是不错的)。

简而言之,没有。有各种各样的尝试,包括堆栈检查(GetCurrentMethod)和lambda表达式,但最终它们都有点效率低下。

除非你需要混淆,否则我只会使用字符串- Get.Int("Value") -这不太可能是一个真正的维护问题。

如果采用内联方法,则堆栈检查方法存在潜在的脆性;如果你需要混淆,我可能会用Expression。或者直接将方法标记为"不要混淆此名称"。

另一种方法是拥有一个抽象基类型,并使用元编程在运行时根据检查属性,使用正确的数据/代码创建具体类型

相关内容

  • 没有找到相关文章

最新更新