c# - 迭代循环并在两个表达式之间切换,唯一的区别是符号

标签 c# winforms

我可以从另一个方法返回一个方法吗?我正在迭代一个循环,当条件为真时,我需要在 (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/

相关文章:

c# - Winform 中的空密码字符

c# - MessageBox.Show 会导致跨线程异常吗?

c# - 具有连接和计数的快速 linq 查询

c# - Datagridview cellcontent 单击事件无法正常工作

winforms - 立即应用DataGridViewComboBoxCell选择更改

c# - 垫片警告消息

c# - Datagridview如何将选定的行转换为自定义对象

c# - 在重载方法上使用泛型参数

c# - Xamarin 安卓 : typesafe FindViewById

c# - WSDL 排序顺序是否相关?