转换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'是一个'变量',但像一个'方法'使用如何解决这个错误?
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之前,引入了 dynamic
s,不像VB那样支持后期绑定:
_obj("ComponentInformation")
所以你不能这样写对于object
类型的变量:
_obj["ComponentInformation"]
在c#中没有dynamic
或反射API(例如,如果你使用COM对象)。
您必须声明适当类型的变量(有索引器),或使用dynamic
,或使用反射API