转换VB出错.NET到c#: obj'是'变量'But就像'方法'

本文关键字:But 方法 就像 变量 obj 出错 VB NET 转换 | 更新日期: 2023-09-27 17:49:51

我尝试像下面这样将vb.net代码转换为c# VB。

  Dim _obj As Object = _srv.GetData(_criteria)
            If _obj IsNot Nothing Then
                For Each Comp As ComponentItem In DirectCast(DirectCast(_obj("ComponentInformation"), Result).Output, List(Of ComponentItem))
                    _lstComp.Add(New Core.Component() With {.ComponentID = Comp.BusinessUnitID, .ComponentName = Comp.BusinessUnitName})
                Next
            End If
c#

   object obj = srv.GetData(criteria);
          if (obj != null)
          {
    foreach (ComponentItem comp in (List<ComponentItem>)((Result)obj("ComponentInformation")).Output)
                  {
                      lstComp.Add(new Component
                      {
                          ComponentId = comp.BusinessUnitID,
                          ComponentName = comp.BusinessUnitName
                      });
                  }
}

转换代码后,我得到了一个错误obj'是一个'变量',但像一个'方法'使用如何解决这个错误?

转换VB出错.NET到c#: obj'是'变量'But就像'方法'

obj可能是一个数组,在c#中你必须通过方括号[]来访问它的成员。所以应该是:

obj["ComponentInformation"]

编辑:(由@Groo提供)

你必须改变你的行:

object obj = srv.GetData(criteria);

您应该指定由该方法返回的类型而不是object。或者您可以使用var来拥有隐式类型变量。

var obj = srv.GetData(criteria);

object改为var:

var obj = srv.GetData(criteria);

For Each Comp As ComponentItem In DirectCast(DirectCast(_obj["ComponentInformation"], Result).Output, List(Of ComponentItem))

c#,在v4.0之前,引入了 dynamics,不像VB那样支持后期绑定:

_obj("ComponentInformation")

所以你不能这样写对于object类型的变量:

_obj["ComponentInformation"]

在c#中没有dynamic或反射API(例如,如果你使用COM对象)。

您必须声明适当类型的变量(有索引器),或使用dynamic,或使用反射API