2015-03-31 76 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 ... 

如果容器返回的对象已经是你是铸造过的对象,为您节省了一步。

相关问题