C# 我已经用vb和C编写了完全相同的代码,但效果不一样。。。逻辑是一致的。。。我希望
对C#来说有点陌生,我试图扩大我的能力。我在VB中有以下代码: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
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++)
{
}