WPF中TreeViewItem的Tag属性Linq Any查询类型转换报错问题
解决WPF TreeViewItem的Linq筛选错误问题
问题场景
我有WPF的TreeViewItem控件,为其Tag属性定义了自定义对象类CustomTag,该类包含Type、Name、Description等属性。需要筛选出所有Tag.Type等于"test"的项,编写的Linq查询报错:
if (!myNode.Items.Cast<TreeViewItem>().Any(item => item.Tag is CustomTag && (CustomTag)item.Tag.Type = "test")) { ...
错误原因
- 类型转换优先级错误:
(CustomTag)item.Tag.Type的执行顺序是先获取item.Tag.Type,再尝试转换为CustomTag,这不符合逻辑——应该先把item.Tag转换为CustomTag,再访问其Type属性。 - 赋值符号误用:判断相等用了赋值符号
=,应该用相等比较运算符==。
修正后的代码
方式1:修正转换与比较符号
if (!myNode.Items.Cast<TreeViewItem>().Any(item => item.Tag is CustomTag && ((CustomTag)item.Tag).Type == "test")) { // 你的逻辑代码 }
方式2:使用C#模式匹配简化(推荐)
利用C#的模式匹配直接将item.Tag转换为CustomTag变量,代码更简洁易读:
if (!myNode.Items.Cast<TreeViewItem>().Any(item => item.Tag is CustomTag tag && tag.Type == "test")) { // 你的逻辑代码 }
内容的提问来源于stack exchange,提问作者gf_uml
相关产品推荐
相关产品推荐

