0

我尝试将 vb.net 代码转换为 c#,如下 VB.NET

  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' is a 'variable' but is used like a 'method'如何解决这个错误?

4

3 回答 3

4

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

obj["ComponentInformation"]

编辑:(礼貌@Groo

你必须改变你的行:

object obj = srv.GetData(criteria);

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

var obj = srv.GetData(criteria);
于 2012-12-28T09:54:07.200 回答
1

更改objectvar

var obj = srv.GetData(criteria);

和 ...

For Each Comp As ComponentItem In DirectCast(DirectCast(_obj["ComponentInformation"], Result).Output, List(Of ComponentItem))
于 2012-12-28T09:54:46.650 回答
0

C#,在 v 4.0 之前,dynamic引入了 s,不支持后期绑定,就像 VB 一样:

_obj("ComponentInformation")

所以,你不能只为object类型变量写这样的东西:

_obj["ComponentInformation"]

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

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

于 2012-12-28T10:03:12.523 回答