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

DotNetBrowser中JS无法调用C#索引器的问题咨询

.NET对象挂载到JS后无法调用索引器的解决方案

问题描述

我正在开发一个.NET项目,需使用不可修改的现有对象。目标C#类如下:

class Fields
{
   Hashtable list = new Hashtable();
   public Fields this[string Name]
   {
      get{
          // 省略内部实现
      }
   }
}

已将对象挂载到JS的window对象:

window = await _browser.MainFrame.ExecuteJavaScript<IJsObject>("window");
window.Properties["Data"] = _myObject;

在JS环境中可访问其他内容,但无法调用Fields的索引器,尝试window.Data.Fields['123']无效,求解决方法。


可行方案

  1. 直接调用底层get_Item方法
    .NET的索引器在编译后会生成名为get_Item的公共方法,你可以在JS中直接调用这个方法来访问索引器:
window.Data.Fields.get_Item('123');
  1. 创建.NET代理类中转访问
    如果第一种方法不生效,可以在.NET侧创建一个代理类,将原Fields对象的索引器暴露为JS可识别的动态属性,无需修改原Fields类:
public class FieldsJsProxy
{
    private readonly Fields _originalFields;

    public FieldsJsProxy(Fields original)
    {
        _originalFields = original;
    }

    // 动态暴露索引器
    public dynamic this[string key] => _originalFields[key];
}

挂载时替换为代理对象:

window.Properties["Data"] = new FieldsJsProxy(_myObject.Fields);

之后在JS中即可通过常规的方括号语法访问:

window.Data['123'];
// 若键名符合JS标识符规则,也可使用点语法
window.Data['123'];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:21:03