【发布时间】:2016-07-18 15:06:13
【问题描述】:
我处于这样一种情况,如果能够确定我在运行时用于 for 循环的终止语句的布尔表达式,那就太好了。或者用更简单的话来说,决定我是想要 i > 0,还是 i i。我知道您可以使用 lambdas 使迭代器在运行时递减或递增,这在 this SO 问题中进行了解释,但是对于终止符来说,是否可以采用相同的方式?
从我自己尝试使用System.Action 来充当匿名函数,因此我仍然可以访问 for 循环使用的对象,而内部操作具有一些逻辑来确定我是前进还是后退(这最终我意识到这不会起作用),似乎情况非常如此,如果可能的话,与 if/else 中只有两个循环相比,它要复杂得多,并且不值得所需的样板代码陈述。当然,我不可能是唯一一个对此感到疑惑的人!
编辑:对于那些不明白我在问什么的人,请关注第一段,第二段只是描述了我的努力。 itsme86 的回答非常简洁地描述了我想知道的可能性,当然前提是它可以运行。
【问题讨论】:
-
真正的问题是为什么。你为什么要做这么迟钝和敏感的事情?
-
一个函数会返回两个对象,一个布尔值和一个索引?
-
您能否至少发布一个您想要 的伪代码示例。当然,你可以用变量替换 for 循环中的常量表达式,但不清楚你想如何定义它。
-
你试图从外部环境访问本地人——这是不可能的。我可以想象的一种方法是将所有本地人提升到一个状态机,该状态机将所有信息分组到一个类中。不过那很恶心。如果调用者和
for在同一范围内(例如本地),那么您当然可以为条件提供Func<bool>,就像前面提到的 lambdas 一样。 -
@Bradley - 是的,这是可能的 - 是的,您可以将布尔表达式存储在变量中。您的最后一条评论说它不是“漂亮而优雅”,但您实际上并没有显示任何东西!如果没有具体的东西可以更好地表明您正在寻找什么(或者您尝试过的不是“漂亮而优雅”的东西),恐怕这个问题太宽泛了。
标签: c# for-loop boolean-expression