我有这个VB代码
Public Function InitJobTicketConcaveItemsType() As JobTicketConcaveItemsType
Dim OutData As JobTicketConcaveItemsType
With OutData
.NumJobItems = 1
ReDim .JobItems(.NumJobItems - 1)
.JobItems(0) = JobDataConcaveEnum.JDBDryData
End With
Return OutData
End Function
已转换的 C#代码
public static JobTicketConcaveItemsType InitJobTicketConcaveItemsType()
{
JobTicketConcaveItemsType OutData = default(JobTicketConcaveItemsType);
var _with25 = OutData;
_with25.NumJobItems = 1;
// ERROR: Not supported in C#: ReDimStatement - replaced with the statement below
Array.Resize(ref _with25.JobItems, _with25.NumJobItems - 1);
_with25.JobItems[0] = FrontEndEnums.JobDataConcaveEnum.JDBDryData;
return OutData;
}
当我尝试运行应用程序时,我得到一个错误IndexOutOfRangeException未处理。我确保使用 Array.Resize()来重新分配数组
VB中的代码不会出错。有线索吗?
JDBDryData定义如下
public enum JobDataConcaveEnum
{
JDBWetData = 0,
JDBDryData,
JDBWetCylinder,
JDBAxis
}
我在声明中得到错误
_with25.JobItems[0]=FrontEndEnums.JobDataConcaveEnum.JDBDryData;
答案 0 :(得分:1)
为什么要在代码的以下行中将_with25.JobItems
数组的大小调整为0
。
Array.Resize(ref _with25.JobItems, _with25.NumJobItems - 1);
那么你的数组大小变为零会发生什么。 当涉及到行
_with25.JobItems[0] = FrontEndEnums.JobDataConcaveEnum.JDBDryData;
ArrayIndexOutOfBound
异常的,你可以看到,你试图将一个值设置为零的元素,其中根本没有元素(零大小的数组)
删除Array.Resize(ref _with25.JobItems, _with25.NumJobItems - 1);
或者编辑如下相同的行
Array.Resize(ref _with25.JobItems, _with25.NumJobItems);
并查看。
答案 1 :(得分:1)
在VB array declarations中,指定最后一个有效索引:
'Declare a single-dimension array of 5 values
Dim numbers(4) As Integer
在C# array declarations中,指定数组的长度。
这意味着在将VB数组声明转换为C#声明时应始终添加1。所以,简单地说,不要减去1:
Array.Resize(ref _with25.JobItems, _with25.NumJobItems);
答案 2 :(得分:1)
问题是您无法将数组大小调整为0,因为已经提到了其他答案。
此外,您需要知道VBscript中声明的数组大小比C#多1。因此,请确保提供合适的尺寸。因此,在您的情况下,您无法在不调整数量的情况下公然将_with25.NumJobItems - 1
从VBScript转换为C#。
关于VBScript和C#中的数组大小:
VB脚本:
Dim arr(5)
'大小为6,您可以通过arr(0),arr(1),... arr(5)
C#
MyType [] arr = new MyType [5];
//大小为5,您可以通过arr [0],arr [1],... arr [4]
答案 3 :(得分:0)
您根本不需要使用def visitdir(path):
result = []
for root,dirs,files in os.walk(path):
for filepath in files:
result.append(''.join(os.path.join(root,filepath)))
return result
if __name__ == '__main__':
path = raw_input("Please input the folder you want to walk:")
visitdir(path)
,只需将现有数组中的内容复制到新数组中,然后使用Array.Resize
将其存储到原始数组中:
Array.CopyTo
答案 4 :(得分:0)
大多数答案令人困惑,ReDim'与ReDim Preserve'。对于简单的ReDim'的转换,不需要甚至推荐Array.Resize调用 - C#等价物只是:
public JobTicketConcaveItemsType InitJobTicketConcaveItemsType()
{
JobTicketConcaveItemsType OutData = new JobTicketConcaveItemsType();
OutData.NumJobItems = 1;
OutData.JobItems = new foo[OutData.NumJobItems];
OutData.JobItems[0] = JobDataConcaveEnum.JDBDryData;
return OutData;
}