2015-03-31 34 views
-1

我對.NET框架中的C#編碼比較陌生。我正在使用Visual Studio 2010。我覺得這是一個簡單的問題,但無論我如何使用可見性嘗試,它都不起作用。 我只想將VB.Net中的代碼轉換爲C#。它在Vb上工作正常,但是當我將它寫入C#時,它提供了一個錯誤。錯誤:'oItem'是一個'變量',但像'方法'一樣使用

這裏是錯誤:「OITEM」是「變量」,但使用像一個「方法」

請看看代碼,告訴我,我俯瞰什麼。我已經搜索了當然問題以及谷歌搜索,但問題是,這個錯誤主要與數組有關。對我而言,它不是。

在C#

foreach (object oItem in modWeldedCylinder.ObjClsWeldedCylinderFunctionalClass.FormNavigationOrder) 
{ 
if (oItem(clsWeldedCylinderFunctionalClass.EOrderOfFormNavigationArraylist.CurrentFormName).ToString().Equals(modWeldedCylinder.ObjClsWeldedCylinderFunctionalClass.ObjCurrentForm.Name)) 
       { 
        Form oForm = null; 
        Form oCurrentForm = null; 

     } 
} 

在VB.Net

For Each oItem As Object In ObjClsWeldedCylinderFunctionalClass.FormNavigationOrder 

    If oItem(clsWeldedCylinderFunctionalClass.EOrderOfFormNavigationArraylist.CurrentFormName).ToString.Equals(ObjClsWeldedCylinderFunctionalClass.ObjCurrentForm.name) Then 
      Dim oForm As Form = Nothing 
      Dim oCurrentForm As Form = Nothing 
+0

什麼類型/類是oItem?在此發佈其定義。對於'object o;'在C#中不存在'o()'。 – DrKoch 2015-03-31 06:36:36

+0

oItem是對象類型 – 2015-03-31 06:49:02

+0

錯誤。它的真實類型必須是不同的。使用調試器,快速觀看,第三欄。 – DrKoch 2015-03-31 06:49:53

回答

0

大概[]代替()OITEM後:

foreach (object oItem in modWeldedCylinder.ObjClsWeldedCylinderFunctionalClass.FormNavigationOrder) 
{ 
if (oItem[clsWeldedCylinderFunctionalClass.EOrderOfFormNavigationArraylist.CurrentFormName].ToString().Equals(modWeldedCylinder.ObjClsWeldedCylinderFunctionalClass.ObjCurrentForm.Name)) 
       { 
        Form oForm = null; 
        Form oCurrentForm = null; 

     } 
} 
+0

如果我使用[] insted of(),那麼再次出現錯誤。錯誤:不能將索引用[]指定爲'object'類型的表達式 – 2015-03-31 06:21:35

+0

好的,那麼當您使用()時,您正在使用對象的默認方法。 C#沒有默認方法,所以你必須找出使用什麼方法/函數。 – idstam 2015-03-31 06:25:10

0

變量是佔位數據/等級。他們是這樣的:

int j = 6; 

方法是功能,並定義如下:

public int GetAValue() 
{ 
    return 6; 
} 

而且像這樣使用:

int x = GetAValue(); 

foreach循環定義一個變量oItem

foreach (object oItem in ... 

變量oItem只能用於設置其值或使用其值或子值,它不能像方法一樣使用。目前您正在使用oItem之類的方法,oItem(...)。請注意變量名右側的()

我個人不知道VB,所以我無法爲你翻譯你的代碼。但如果我是採取裂縫它,我應該這樣做:

var formname = (clsWeldedCylinderFunctionalClass.EOrderOfFormNavigationArraylist.CurrentFormName)oItem; 

if (formname.ToString().Equals(ObjClsWeldedCylinderFunctionalClass.ObjCurrentForm.name)) 
{ 
    // do something if true 
} 

因爲它看起來像你正試圖將對象轉換爲該類的()內,然後使用該做字符串比較。通過將()放置在變量名稱的左側,我們將該對象轉換到左側的類,然後使用它。

您可以短切的整個過程中的foreach,像這樣:

foreach (var formname in ... 

如果容器返回的對象已經是你是鑄造過的對象,爲您節省了一步。

相關問題