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

Xamarin Live Player中HtmlDocument操作抛出对象不匹配异常

解决Xamarin Live Player中HtmlDocument实例化的类型不匹配异常

这问题我之前碰到过类似的情况,核心原因在于Xamarin Live Player是即时解释运行的环境,和编译为APK后的AOT(提前编译)环境对类型的处理逻辑存在差异,尤其是NInterpret这类涉及动态解释的库,在解释模式下泛型集合的类型装箱/识别会出现偏差,从而抛出你看到的类型不匹配异常。

下面是几个针对性的解决方案,你可以逐一尝试:

  • 显式强制转换集合类型
    当你获取到返回的集合对象时,手动将其强制转换为目标泛型集合类型,避免解释器自动推断出错:

    // 示例:创建HtmlDocument后处理集合
    var doc = new HtmlDocument();
    // 显式转换为目标泛型集合
    var targetElements = (IEnumerable<NInterpretedObject>)doc.TargetCollection;
    
  • 添加Live Player专属的条件编译分支
    既然编译为APK后完全正常,你可以在代码中针对Live Player环境做兼容处理,其他环境保持原有逻辑:

    #if DEBUG && __XAMARIN_LIVE_PLAYER__
    // Xamarin Live Player环境下的兼容代码
    var rawCollection = doc.TargetCollection;
    var convertedElements = new List<NInterpretedObject>();
    foreach (var item in rawCollection)
    {
        convertedElements.Add((NInterpretedObject)item);
    }
    #else
    // 正常编译环境下的代码
    var convertedElements = doc.TargetCollection;
    #endif
    
  • 检查并更新NInterpret库版本
    有可能是你使用的NInterpret版本对Xamarin Live Player的兼容性不足,尝试更新到该库的最新稳定版本,或者查看库的官方文档/issue列表,确认是否存在已知的Live Player兼容问题。

  • 手动构建目标集合
    如果是从字符串加载HTML后出现的异常,可以跳过库返回的集合,手动遍历并构建符合类型要求的集合:

    var htmlContent = "<div>示例HTML内容</div>";
    var doc = HtmlDocument.Load(htmlContent);
    var targetList = new List<NInterpretedObject>();
    foreach (var node in doc.Nodes)
    {
        var typedNode = node as NInterpretedObject;
        if (typedNode != null)
        {
            targetList.Add(typedNode);
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:01:17