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

如何从ListViewItem的Tag属性获取匿名类型对象的XPATH属性?

解决匿名类型赋值给Object后无法访问属性的问题

你碰到的这个问题很常见——当你把匿名类型对象赋值给ListViewItem.Tag,再用object类型去接收它时,编译阶段没法识别匿名类型的XPATH属性,所以才会抛出CS1061: 'object' does not contain a definition for 'XPATH'的错误。下面给你三种可行的解决办法:

1. 用dynamic类型接收Tag值(快速解决)

dynamic会把属性的解析推迟到运行时,只要你的Tag里确实存在XPATH属性,就能正常访问:

dynamic myObj = myListView.Items[0].Tag;
string xpath = myObj.XPATH;

⚠️ 注意:这种方式没有编译期类型检查,如果后续Tag里的对象发生变化(比如没有XPATH属性了),运行时会抛出异常。

2. 创建显式类替代匿名类型(推荐,类型安全)

这是最稳妥的做法,先定义一个明确的类来承载你的数据:

// 先定义一个用于存储节点信息的类
public class NodeInfo
{
    public string XPATH { get; set; }
}

然后赋值和获取的时候都用这个类:

// 赋值时使用显式类
newListViewItem.Tag = new NodeInfo { XPATH = FindXPath(node) };

// 获取时强转成NodeInfo类型
NodeInfo myObj = (NodeInfo)myListView.Items[0].Tag;
string xpath = myObj.XPATH;

这种方法有编译期类型检查,代码可读性和可维护性都更高,适合大多数场景。

3. 使用反射(不推荐,仅备用)

如果前两种方法都没法用,你可以通过反射在运行时获取属性值,但这种方式性能差且代码不直观:

Object myObj = myListView.Items[0].Tag;
// 通过反射获取XPATH属性的值
string xpath = myObj.GetType().GetProperty("XPATH").GetValue(myObj).ToString();

内容的提问来源于stack exchange,提问作者JuMoGar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:49:17