【问题标题】:Removing part of condition in some cases在某些情况下删除部分条件
【发布时间】:2017-12-06 12:30:23
【问题描述】:

有没有办法删除IF 语句中的部分条件,这取决于我是否需要它。下一个代码是示例,因为在我的代码中,我的语言中有很多用户定义的函数和过程:

IF A THEN
Q := TQuery.Create(Application);
IF B AND C AND D AND E AND Q.FieldByName('Example').AsInteger = 1 then
BEGIN
...
END

所以,假设在创建TQuery 之后,我已经向其中导入了一些数据(我没有在这里编写那部分代码)。如果没有创建Q(因为不满足条件A),有没有办法在第二个IF 语句中删除带有Q 的部分,或者我是否必须再次扭曲整个IF 语句没有Q 部分?

我正在考虑使用 CASE 之类的东西来检查是否创建了 Q,如果没有,就跳过这部分句子。如果可以,我该如何跳过?

【问题讨论】:

  • 把begin放在if语句之后,end放在当前end语句之后!
  • @Dsm 但我每次都需要第二个IF 来执行,无论条件A 是否满足。如果A 不满意,我需要在没有Q 部分的情况下执行第二个IF。如果我按你说的那样放BEGINEND,每次A不满意,第二个IF也不会执行。

标签: delphi if-statement delphi-2006


【解决方案1】:

快速而肮脏的方式

IF B AND C AND D AND E AND (NOT A OR Q.FieldByName('Example').AsInteger = 1) then

请注意,请尽量使您的 if 条件更简单。

EvaluationRequested := A AND C ...
QueryNeedsAval := NOT A OR ... 
if EvaluationRequested AND QueryNeedsAval then 
begin
   ...
end;

【讨论】:

  • 这就是我想要的。谢谢你的朋友。
  • @nikname 如果条件真的是 Q 是否被创建,我宁愿选择(not Assigned(Q) OR (Q.FieldByName('Example').AsInteger = 1))。这样可以避免重复条件 A。只需确保将其初始化为 nil。
  • 我已经通过插入TRUEBoolean variable 来解决这个问题,如果条件A 不满足并且如果满足,我的代码如下所示:booleanVariable := Q.FieldByName('Example').AsInteger = 1。我在这里面临的新问题是,当Q.FieldByName('Example').AsInteger 中没有任何内容,甚至没有NULL 值时,我的booleanVariable 永远不会被分配。 Q.FieldByName('Example').AsInteger 是空的,因为执行的背景 SQL 由于其条件没有返回任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多