我有这个代码不能正常工作.
for (int i = 0; i <= 140; i++)
{
if (OneLine_Array.GetAt(i) == "Pass" || "Fail" || "Warn" || "Active")
{
OneLine_State.Add(OneLine_Array.GetAt(i));
}
}
Run Code Online (Sandbox Code Playgroud)
如果我有它,它将工作
for (int i = 0; i <= 140; i++)
{
if ((OneLine_Array.GetAt(i) == "Pass") || (OneLine_Array.GetAt(i) == "Fail") || (OneLine_Array.GetAt(i) == "Warn") || (OneLine_Array.GetAt(i) == "Active"))
{
OneLine_State.Add(OneLine_Array.GetAt(i));
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道有没有更短的方法来做这个而不是一遍又一遍地复制相同的代码行?
谢谢.
您可以GetAt在达到条件之前存储结果,然后您不需要多次评估它:
auto x = OneLine_Array.GetAt(i);
if (x == "Pass" || x == "Fail" || x == "Warn" || x == "Active")
Run Code Online (Sandbox Code Playgroud)
对于一个足够短的变量名称(但请称之为更好的东西x),这将比你的第二个例子短.
你原来的条件不工作的原因是因为每个的"Fail","Warn"以及"Active"是true,这样的逻辑或也将是true.它们是true因为它们是数组类型,可以转换为指向它们的第一个元素(char*)的指针.非空指针转换为true.