【发布时间】:2012-03-16 06:24:57
【问题描述】:
所以我正在编写一个 C# 应用程序,使用 .net/c# 4.0 我有一个接受自定义类型和字典的方法。 我将它重用于各种事情,但由于某种原因,我想不出一种封装逻辑的方法。问题是这一行
if (FastIntParse.FastParse(_dict[_Rule.Key].hourly_data[a].PropertyA) >
_Rule.Value)
在另一个用途中它可能是
if (FastIntParse.FastParse(_dict[_Rule.Key].hourly_data[a].PropertyB) >
_Rule.Value)
在各种情况下唯一不同的是我用来与规则值进行比较的属性。出于某种原因,我想不出一种方法来重用它,因为我没有传递给某个函数的值,因为该值是在函数中派生的。我如何编写一个函数来抽象它需要知道它需要派生哪个值并将该信息传递给它,即传递它需要检查的属性而不是所述属性的值。
int a;
for (int z= 0;z<=2;z++)
{
a = (z * z) * 24;
for (; (a%24) <= _Rule.AlertEndTime; a++)
{
if (FastIntParse.FastParse(_dict[_Rule.Key].hourly_data[a].PropertyA) >
_Rule.Value)
{
EnqueueRuleTrigger(_Rule);
break;
}
}
}
我不断地在需要的地方用适当的属性重写这个方法......这显然是非常浪费的,并且需要在许多地方进行任何更改。 提前致谢
【问题讨论】:
-
如果我不清楚,我什至没有循环外属性的对象引用。我想封装一些包含循环逻辑[不会改变]的东西,以及为方法提供自定义属性的能力。如果我有 4 个条件完全相同,除了它们评估的属性,所以我刚刚复制并粘贴了整个代码并更改了属性引用。更糟糕的是,这 4 个中的每一个都有 3 个变体,其中一个 if 使用 >、a
标签: c# .net lambda anonymous-function code-reuse