Node是一个非常简单的类,只有一个构造函数和一些变量:一个"名称"(实际上只是一个char)和两个名为"left"和"right"的子节点指针.
我刚刚开始编写一些需要放到最左边节点的代码,当我提出这个问题时我很高兴:
Node *current = this->root;
while (true) (current->left != nullptr) ? current = current->left : break;
Run Code Online (Sandbox Code Playgroud)
看起来很简单:在无限循环中,检查当前是否有一个左子,如果是,将当前设置为该左子,如果没有,则跳出循环.这是一个很酷的小单行,不太难以理解.(我评论了它!)
好吧,我的编译器不喜欢它:
iterator.cpp:20:70: error: expected expression
while (true) (current->left != nullptr) ? current = current->left : break;
^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
而且,只是在while循环中抛出一些括号并将三元运算符移动到它自己的行上并没有帮助(不出所料).我不得不把它变成if/else让编译器接受它.
有人可以解释它是如何解释单线及其对象的原因吗?
我得到了一个neighbor数组(由 Tile 对象组成),它的长度始终为 4,无论是否填充了所有元素。如果该元素/位置不为空,我想扫描该数组并更改 Tile 中包含的 PB 的颜色。我可以if neighbors[i] = null使用以下代码通过标准检查来做到这一点:
for (int i = 0; i < Neighbors.Count(); i++)
{
if (Neighbors[i] != null)
Neighbors[i].TilePB.Backcolor = Color.Red;
else
continue; // just put that here for some more context.
}
Run Code Online (Sandbox Code Playgroud)
但我想知道是否可以在一行中完成此操作,类似于使用 ? 操作员。我试过使用三元运算符,但我不能continue使用一个(我尝试过的三元语句:Neighbors[i] != null ? /* do something */ : continue,为什么它不起作用的来源:为什么 break 不能与三元运算符一起使用?)。
是否有另一种方法来检查数组的元素是否为空,只使用一行(最好不使用 hack)?