我可以从另一个方法返回一个方法吗?我正在迭代一个循环,当条件为真时,我需要在 (y += x) 和 (y-= x) 之间切换。我正在考虑声明一个 bool,当为 true 时,调用一个返回 (y += x) 的方法,当为 false 时,返回 (y+=x)。
这可以做到吗?或者有没有更优雅的方法来做到这一点......代码示例值得赞赏。谢谢
进一步解释... 如果列表包含例如20 项。我循环遍历列表并使用 (y -= x) 执行一些操作。如果条件为真,我需要继续循环并执行一些操作,但这次使用 (y+= x) 直到条件再次为真...并再次恢复为 (y-=x) 等等。
最佳答案
是的,您可以从函数返回函数。有许多类型定义了类型的签名。就您而言,您需要 Func<T1, T2, TResult>
或者更具体地说Func<int, int, int>
。例如,您可以有 Add
函数,以及 Subtract
功能如下:
Func<int, int, int> Add = (a, b) => a + b;
Func<int, int, int> Subtract = (a, b) => a - b;
如果您随后完成作业,则可以执行 y = ThatFunction(x, y);
哪里ThatFunction
将是对您选择的任何函数的引用。
但是,您要求一种优雅的方式,而这对于您所面临的问题来说绝对不是一种优雅的方式。相反,您应该只保留一个 bool 值来告诉您要执行这两个操作中的哪一个。只要条件成立,您就可以切换该 bool 值:
bool subtract = false;
foreach (var someThing in someOtherThing)
{
if (condition)
{
// toggle the current action
subtract = !subtract;
}
// do something else
// now perform the correct action
if (subtract)
y -= x;
else
y += x;
}
如您所见,condition
负责切换 subtract
bool 值,但只有后者负责选择正确的操作。
关于c# - 迭代循环并在两个表达式之间切换,唯一的区别是符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20777203/