我尝试将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'是'变量'但是像'方法'一样使用如何重新发送此错误?
答案 0 :(得分:4)
obj
可能是一个数组,在C#中你必须通过方括号[]
访问其成员。所以它应该是:
obj["ComponentInformation"]
编辑:(礼貌@Groo)
你必须改变你的行:
object obj = srv.GetData(criteria);
您应该指定方法返回的类型,而不是object
。或者,您可以使用var
来隐式输入变量。
var obj = srv.GetData(criteria);
答案 1 :(得分:1)
将object
更改为var
:
var obj = srv.GetData(criteria);
而且......
For Each Comp As ComponentItem In DirectCast(DirectCast(_obj["ComponentInformation"], Result).Output, List(Of ComponentItem))
答案 2 :(得分:0)
在v 4.0之前,引入dynamic
的C#不支持后期绑定,就像VB一样:
_obj("ComponentInformation")
所以,你不能只为object
类型的变量:
_obj["ComponentInformation"]
没有dynamic
或反射API的C#(例如,如果您使用COM对象)。
您必须声明适当类型的变量(具有索引器),或使用dynamic
,或使用反射API。