2012-12-28 32 views
0

我嘗試vb.net代碼轉換爲C#像下面 VB.NET錯誤轉換VB.NET到C#:OBJ」是 '變量',但使用像 '方法'

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後」是‘變量’,但使用像‘方法’如何reslove這個錯誤?

回答

3

obj可能是一個數組,你必須在C#中通過方括號[]訪問其成員。因此,它應該是:

obj["ComponentInformation"] 

編輯:(禮貌@Groo

你必須改變你的線路:

object obj = srv.GetData(criteria); 

相反的object應指定的被返回的類型通過該方法。或者你可以使用var來隱式類型化變量。

var obj = srv.GetData(criteria); 
+0

我嘗試這個,但我得到錯誤無法應用[]對'object'類型的表達式進行索引 – JEMI

+1

@JEMI,您的方法'srv.GetData'返回的是什麼,而不是您指定該類型的對象,而定義'obj ' – Habib

+2

在第一行用'var'替換'object'可能會修正錯誤(除非'GetData'確實返回一個'object'並且實際上需要轉換爲可索引類。 – Groo

1

變化objectvar

var obj = srv.GetData(criteria); 

而且......

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

我嘗試這個,但我得到錯誤無法應用[]的索引到'對象'類型的表達式 – JEMI

+0

爲什麼鍵入srv.GetData(條件);返回?也許把它改成:var obj = srv.GetData(criteria); –

+0

@DaveBish:顯然是'Object'。 – Dennis

0

C#,之前到v 4.0,其中dynamic小號的相繼出臺,不支持後期綁定,像VB一樣:

_obj("ComponentInformation") 

所以,你不能只是寫像這樣的object類型的變量:

_obj["ComponentInformation"] 
在C#

沒有dynamic或反射API(例如,如果您使用的COM對象的工作)。

您必須聲明適當類型的變量(具有索引器),或使用dynamic或使用反射API。

相關問題