C# 我已经用vb和C编写了完全相同的代码,但效果不一样。。。逻辑是一致的。。。我希望

C# 我已经用vb和C编写了完全相同的代码,但效果不一样。。。逻辑是一致的。。。我希望,c#,.net,vb.net,binaryreader,C#,.net,Vb.net,Binaryreader,对C#来说有点陌生,我试图扩大我的能力。我在VB中有以下代码: Private Sub BreakdownFilesToCompare(ByRef file1BReader As BinaryReader, _ ByRef file2BReader As BinaryReader, _ ByRef firstFile As StandardFormatF

对C#来说有点陌生,我试图扩大我的能力。我在VB中有以下代码:

    Private Sub BreakdownFilesToCompare(ByRef file1BReader As BinaryReader, _
                                  ByRef file2BReader As BinaryReader, _
                                  ByRef firstFile As StandardFormatFile, _
                                  ByRef secondFile As StandardFormatFile)

    file1BReader.ReadInt32()
    file2BReader.ReadInt32()

    firstFile.numberOfSeries = file1BReader.ReadInt32
    secondFile.numberOfSeries = file2BReader.ReadInt32

    If firstFile.numberOfSeries <> secondFile.numberOfSeries Then
        WriteToConsole("The number of Elements the two files do not match...Stopping")
        Exit Sub
    End If

    For i As Integer = 0 To firstFile.numberOfSeries - 1

        Dim tempSeriesData1 As New StandardFormatFileSeries
        Dim tempSeriesData2 As New StandardFormatFileSeries

        tempSeriesData1.standardNumOfElements = file1BReader.ReadInt32
        tempSeriesData1.standardSeriesName = GetSeriesName(file1BReader)

        tempSeriesData2.standardNumOfElements = file2BReader.ReadInt32
        tempSeriesData2.standardSeriesName = GetSeriesName(file2BReader)


        For j As Integer = 0 To tempSeriesData1.standardNumOfElements - 1
            Dim tempElementData1 As New StandardFormatFileElement


            tempElementData1.standardX_TimeValue = file1BReader.ReadSingle
            tempElementData1.standardY_SampleValue = file1BReader.ReadSingle
            tempSeriesData1.standardDataElements.Add(tempElementData1)
        Next

        For k As Integer = 0 To tempSeriesData2.standardNumOfElements - 1
            Dim tempElementData2 As New StandardFormatFileElement

            tempElementData2.standardX_TimeValue = file2BReader.ReadSingle
            tempElementData2.standardY_SampleValue = file2BReader.ReadSingle

            tempSeriesData2.standardDataElements.Add(tempElementData2)



        Next

        firstFile.standardSeriesData.Add(tempSeriesData1)
        secondFile.standardSeriesData.Add(tempSeriesData2)


    Next
End Sub


Private Function GetSeriesName(ByRef bReader As BinaryReader) As String
    Dim enc As New System.Text.UTF8Encoding()
    Dim title As Byte()

    title = bReader.ReadBytes(128)
    Return enc.GetString(title)

End Function
Private Sub-BreakdownFilesToCompare(ByRef file1BReader作为二进制读取器_
ByRef file2BReader作为BinaryReader_
ByRef firstFile作为标准格式文件_
ByRef第二个文件(作为标准格式文件)
file1BReader.ReadInt32()
file2BReader.ReadInt32()
firstFile.numberOfSeries=file1BReader.ReadInt32
secondFile.numberOfSeries=file2bdreader.ReadInt32
如果是firstFile.numberOfSeries secondFile.numberOfSeries,则
WriteToConsole(“两个文件不匹配的元素数…正在停止”)
出口接头
如果结束
对于i作为整数=0到firstFile.numberOfSeries-1
Dim tempSeriesData1作为新的标准格式文件系列
Dim tempSeriesData2作为新的标准格式文件系列
tempSeriesData1.standardNumOfElements=file1BReader.ReadInt32
tempSeriesData1.standardSeriesName=GetSeriesName(文件阅读器)
tempSeriesData2.standardNumOfElements=file2BReader.ReadInt32
tempSeriesData2.standardSeriesName=GetSeriesName(文件阅读器)
对于作为整数=0的j,将其转换为tempSeriesData1.standardNumOfElements-1
Dim tempElementData1作为新的StandardFormatFileElement
templementdata1.standardX_TimeValue=file1BReader.ReadSingle
tempElementData1.standardY_SampleValue=file1BReader.ReadSingle
tempSeriesData1.standardDataElements.Add(tempElementData1)
下一个
对于tempSeriesData2.standardNumOfElements-1,k为整数=0
Dim tempElementData2作为新的StandardFormatFileElement
templementdata2.standardX_TimeValue=file2bdreader.ReadSingle
tempElementData2.standardY_SampleValue=file2BReader.ReadSingle
tempSeriesData2.standardDataElements.Add(tempElementData2)
下一个
firstFile.standardSeriesData.Add(tempSeriesData1)
第二个文件.standardSeriesData.Add(tempSeriesData2)
下一个
端接头
私有函数GetSeriesName(ByRef bReader作为二进制读取器)作为字符串
作为新系统的Dim enc.Text.UTF8Encoding()
将标题设置为字节()
title=bReader.ReadBytes(128)
返回enc.GetString(标题)
端函数
这就是我在C语言中所做的#

private void compareStandardFormat(ref BinaryReader file1bleader,ref BinaryReader file2bleader,
ref FileStructure第一个文件,ref FileStructure第二个文件)
{
file1breader.ReadInt32();
file2bdreader.ReadInt32();
firstfile.numberofseries=file1breader.ReadInt32();
secondfile.numberofseries=file2bdreader.ReadInt32();
if(firstfile.numberofseries!=secondfile.numberofseries)
{
writeToConsole(“两个文件不匹配的元素数…正在停止”);
返回;
}
对于(int i=0;i
VB方式可以正确读取二进制读取器,并正确索引到下一个位置……C#方式不能。在第一次迭代后,它会失去跟踪…为什么


请提供帮助。

我不熟悉VB,但看起来您的集合还没有结束,因为您都在从元素计数中减去1,并使用“小于”(我认为这两种方法不同:

For i As Integer = 0 To firstFile.numberOfSeries - 1
for (int i = 0; i < firstfile.numberofseries - 1; i++)
将i作为整数=0转换为firstFile.numberOfSeries-1
对于(int i=0;i
我认为直接的C#翻译是:

for (int i = 0; i <= firstfile.numberofseries - 1; i++)

for(int i=0;i我想这是for运算符

在C中#

这将运行11次

因此,解决办法是:

在C#回路检查上去掉“-1”

为了清楚起见,我将把VB代码编写为

For i As Integer = 1 To firstFile.numberOfSeries
C#代码为

for(int i=0;i
因为在每种情况下,firstFile.numberOfSeries都是循环运行的次数。

尝试更改:

for (int i = 0; i < firstfile.numberofseries - 1; i++)
{
}
for(int)
for (int i = 0; i < 10; i++)
{
   // inner loop
}
For i As Integer = 0 To 10
   rem inner loop
Next
For i As Integer = 1 To firstFile.numberOfSeries
for (int i = 0; i < firstfile.numberofseries; i++)
for (int i = 0; i < firstfile.numberofseries - 1; i++)
{
}
int index = firstfile.numberofseries;
for (int i = 0; i < index; i++)
{
}