为什么要将 null 分配给此变量?
Why is null being assigned to this variable?
所以我刚刚发现了 null 合并三元运算符,但我似乎无法弄清楚为什么我的变量在下面的代码行中仍被设置为 null。
MenuItem parent = (treeView.SelectedItem ?? treeView.Items[0]) as MenuItem;
对象 treeView
确实有多个项目。
无论 treeView
是否有选定的项目,变量始终为空。
任何帮助将不胜感激,谢谢:)
treeView.SelectedItem
可能为 null,也可能不为 null,但它绝不是 MenuItem
.
treeView.Items[0]
可能为 null,也可能不为 null,但它绝不是 MenuItem
.
这个表达式...
(treeView.SelectedItem ?? treeView.Items[0])
...returns treeView.SelectedItem
的值(如果该值不为空)。如果该值为 null,则表达式 returns treeView.Items[0]
。最好说“它 returns 第一个非空操作数”。
无论你得到哪个,你都可以使用 as
尝试将其转换为 MenuItem
。转换永远不会成功,因为您正在转换的实际对象永远无法转换为 Menuitem
.
as
returns null
无法转换时。
所以你总是得到 null
.
当你遇到这种情况时,放置一个断点并将鼠标悬停在表达式的所有操作数上。一旦您知道操作数 的真正含义 ,您就可以 select 子表达式,例如 (treeView.SelectedItem ?? treeView.Items[0])
并将鼠标悬停在它们上面。如果您有任何疑问,请不要像 Bertrand Russell 那样只是试图盯着代码,然后从第一原则中找出答案。查看调试器中的值将提供您从未想过的关键信息。
更新
但您真正的问题是,您以我尚未确定的某种方式填充了带有 MenuItems 的 WPF TreeView,并且您想要取回 selected 菜单项。我试图重现你所做的,我的树视图上的项目集合充满了 MenuItems,但你说你看到的是 TreeViewItems。所以我不确定发生了什么。
我觉得这在任何情况下都是填充 TreeView 的糟糕方法。我建议将迷你视图模型 class 的集合绑定到 TreeView 的 ItemsSource 属性。 Stack Overflow 上有很多这样的例子。这就是 WPF 希望您做事的方式,而且我发现如果您不按照它希望您做的方式做事,WPF 会非常不友好。
所以我刚刚发现了 null 合并三元运算符,但我似乎无法弄清楚为什么我的变量在下面的代码行中仍被设置为 null。
MenuItem parent = (treeView.SelectedItem ?? treeView.Items[0]) as MenuItem;
对象 treeView
确实有多个项目。
无论 treeView
是否有选定的项目,变量始终为空。
任何帮助将不胜感激,谢谢:)
treeView.SelectedItem
可能为 null,也可能不为 null,但它绝不是 MenuItem
.
treeView.Items[0]
可能为 null,也可能不为 null,但它绝不是 MenuItem
.
这个表达式...
(treeView.SelectedItem ?? treeView.Items[0])
...returns treeView.SelectedItem
的值(如果该值不为空)。如果该值为 null,则表达式 returns treeView.Items[0]
。最好说“它 returns 第一个非空操作数”。
无论你得到哪个,你都可以使用 as
尝试将其转换为 MenuItem
。转换永远不会成功,因为您正在转换的实际对象永远无法转换为 Menuitem
.
as
returns null
无法转换时。
所以你总是得到 null
.
当你遇到这种情况时,放置一个断点并将鼠标悬停在表达式的所有操作数上。一旦您知道操作数 的真正含义 ,您就可以 select 子表达式,例如 (treeView.SelectedItem ?? treeView.Items[0])
并将鼠标悬停在它们上面。如果您有任何疑问,请不要像 Bertrand Russell 那样只是试图盯着代码,然后从第一原则中找出答案。查看调试器中的值将提供您从未想过的关键信息。
更新
但您真正的问题是,您以我尚未确定的某种方式填充了带有 MenuItems 的 WPF TreeView,并且您想要取回 selected 菜单项。我试图重现你所做的,我的树视图上的项目集合充满了 MenuItems,但你说你看到的是 TreeViewItems。所以我不确定发生了什么。
我觉得这在任何情况下都是填充 TreeView 的糟糕方法。我建议将迷你视图模型 class 的集合绑定到 TreeView 的 ItemsSource 属性。 Stack Overflow 上有很多这样的例子。这就是 WPF 希望您做事的方式,而且我发现如果您不按照它希望您做的方式做事,WPF 会非常不友好。