You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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")) { ...

错误原因

  1. 类型转换优先级错误:(CustomTag)item.Tag.Type的执行顺序是先获取item.Tag.Type,再尝试转换为CustomTag,这不符合逻辑——应该先把item.Tag转换为CustomTag,再访问其Type属性。
  2. 赋值符号误用:判断相等用了赋值符号=,应该用相等比较运算符==。

修正后的代码

方式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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:39:51