尝试将一些旧的VB.NET代码移植到C#,并遇到阵列索引的语法问题。
在VB方法中,名为Get_Coverage_Percentage,是一行代码如下:
Dim RS_Activation_List = Get_Activation_List(Company_ID, Start_Date, End_Date, 0)
其中RS_Activation_List在方法Get_Activation_List中初始化为
Dim Activation_List(ds.Tables(0).Rows.Count) As Activation_List
根据我目前对VB.NET语法的理解,上面转换为1D数组。 但是,稍后在Get_Coverage_Percentage中,是一行访问Activation_List数组,如下所示:
RS_Prorated_Activation = FormatNumber(RS_Activation_List(RS_Sum_Activation, 5), 2)
如何使用2个索引访问1D数组? Activation_List本身是一个简单的结构,定义如下:
Structure Activation_List
Dim Mobile_ID As Integer
Dim Radio_Address As Double
Dim Activation_Date As Date
Dim Pro_Rated_Fee As Integer
Dim Sum_Pro_Rated_Fee As Integer
End Structure
VB专业版,我在这看什么?
* 更新:* 方法* Get_Activation_List *看起来像这样,取出了一些部分:
Public Function Iridium_Get_Activation_List(ByVal Company_ID, ByVal Start_Date, ByVal End_Date, ByVal Access_Fee) As Array
Dim vNumOfDaysInMonth = Get_Number_Of_Day_In_Month(Start_Date)
Dim SQL = "SELECT * from assMobileRadio;"
Dim drDataRow As DataRow
Dim ds As DataSet = GetData(SQL)
Iridium_Get_Activation_List = Nothing
Dim Activation_List(ds.Tables(0).Rows.Count) As Activation_List
Dim vSumofProrated = 0
Dim vRow = 0
For Each drDataRow In ds.Tables(0).Rows
'missing code
vRow = vRow + 1
Next
Return Activation_List
End Function
是的,代码无法编译。
答案 0 :(得分:2)
此行声明了一个类型为Activation_List
Dim Activation_List(ds.Tables(0).Rows.Count) As Activation_List
此行声明了另一种不同类型的变量:
Dim RS_Activation_List = Get_Activation_List(Company_ID, Start_Date, End_Date, 0)
我们不知道你的代码是什么类型,但鉴于这行可行,它是一个自定义类型的二维数组:
RS_Prorated_Activation = FormatNumber(RS_Activation_List(RS_Sum_Activation, 5), 2)
将鼠标悬停在VS中的RS_Activation
上,看看它的内容是什么类型。另外,请确保您有Option Strict On。