gpt4 book ai didi

c# - 如何使 boolean 值表现得像 'latch' ?

转载 作者:太空狗 更新时间:2023-10-30 00:03:20 26 4
gpt4 key购买 nike

我最初有以下代码:

        Boolean successCheckPoint = false;
Boolean failureCheckPoint = false;
Boolean timeFound = false;

foreach (var row in auditRows)
{
timeFound = row.Text.Contains(sCurrentTime) || row.Text.Contains(sLenientTime) || row.Text.Contains(sLenientTime2) ? true : false;

if (timeFound)
{
successCheckPoint = row.Text.Contains("Web User Login Success") && !successCheckPoint ? true : false;
failureCheckPoint = row.Text.Contains("Web User Login Failure") && !failureCheckPoint ? true : false;
}

}

但我发现在 foreach 的后续迭代中,即使 successCheckPoint 或 failureCheckPoint boolean 值已设置为 true,由于我设置分配的方式,它们最终也会设置为 false。


示例问题

第一次迭代

  1. timeFound 为真
  2. successCheckPoint 为假
  3. row.Text 确实包含我想要的文本
  4. successCheckPoint 确实是假的
  5. successCheckPoint 设置为 true

第二次迭代

  1. timeFound 为真
  2. successCheckPoint 为真
  3. row.Text中没有我想要的文字
  4. successCheckPoint 不为假
  5. successCheckPoint 设置为 false

为了解决这个问题,我把代码改成这样:

        Boolean successCheckPoint = false;
Boolean failureCheckPoint = false;
Boolean timeFound = false;

foreach (var row in auditRows)
{
timeFound = row.Text.Contains(sCurrentTime) || row.Text.Contains(sLenientTime) || row.Text.Contains(sLenientTime2) ? true : false;

if (timeFound)
{
if (!successCheckPoint)
{
successCheckPoint = row.Text.Contains("Web User Login Success") ? true : false;
}

if (!failureCheckPoint)
{
failureCheckPoint = row.Text.Contains("Web User Login Failure") ? true : false;
}
}

}

这是我想要的,但感觉应该有更好的方法来完成这种行为。有什么方法可以设置为一旦 boolean 值设置为 true,它就不会在未来的迭代中改回 false?


正确的行为

第一次迭代

  1. timeFound 为真
  2. successCheckPoint 为假
  3. row.Text 确实包含我想要的文本
  4. successCheckPoint 确实是假的
  5. successCheckPoint 设置为 true

第二次迭代

  1. timeFound 为真
  2. successCheckPoint 为真所以跳过重新评估

抱歉,如果这仍然令人困惑。如有必要,我可以稍微解释一下。


编辑:现在我想起来了,我真的不需要 '? true : 此代码的 false' 部分。

新代码:

        Boolean successCheckPoint = false;
Boolean failureCheckPoint = false;
Boolean timeFound = false;

foreach (var row in auditRows)
{
timeFound = row.Text.Contains(sCurrentTime) || row.Text.Contains(sLenientTime) || row.Text.Contains(sLenientTime2);

if (timeFound)
{
if (!successCheckPoint)
{
successCheckPoint = row.Text.Contains("Web User Login Success");
}

if (!failureCheckPoint)
{
failureCheckPoint = row.Text.Contains("Web User Login Failure");
}
}

}

感谢大家的帮助!这是我确定的代码版本:

        Boolean successCheckPoint = false;
Boolean failureCheckPoint = false;
Boolean timeFound = false;

foreach (var row in auditRows)
{
if (row.Text.Contains(sCurrentTime) || row.Text.Contains(sLenientTime) || row.Text.Contains(sLenientTime2))
{
successCheckPoint |= row.Text.Contains("Web User Login Success");
failureCheckPoint |= row.Text.Contains("Web User Login Failure");
}

if (successCheckPoint && failureCheckPoint)
{
break;
}

}

最佳答案

您可以使用 OR assignment operator |= :

bool successCheckPoint = false;
bool failureCheckPoint = false;

foreach (var row in auditRows)
{
if (row.Text.Contains(sCurrentTime) ||
row.Text.Contains(sLenientTime) ||
row.Text.Contains(sLenientTime2))
{
successCheckPoint |= row.Text.Contains("Web User Login Success");
failureCheckPoint |= row.Text.Contains("Web User Login Failure");
}
}

a |= b;a = a | 的缩写b;。因此,如果 a 已经为真,则它保持为真。如果 a 为假且 b 为真,则 a 变为真。否则,a 保持为假。

关于c# - 如何使 boolean 值表现得像 'latch' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11233628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com