IOStream运算符<<从C ++转换为C#

我试图将一些旧的C ++代码转换为C#,并且难以理解以下代码的作用以及如何将其转换为C#。

ifstream fin; fin.open(file, ios::nocreate); if (!fin) { m_iErrorNumber = 1567; num = 0.0; } else { for (int x = 0; x > num; // <==== THIS LINE IS PROBLEM!! } }; fin.close(); 

这可能与C ++代码略有不同,但应该相对类似:

 IEnumerable ReadWhiteSpaceSeparated(string filename) { using(var lines = File.ReadLines(filename)) { return lines.SelectMany(line => line.Split(new []{' ','\t', '\r', '\n'}, StringSplitOptions.RemoveEmptyEntries)); } } IEnumerable ReadDoubles(string filename) { return ReadWhiteSpaceSeparated(filename) .Select(s => double.Parse(s, CultureInfo.InvariantCulture)); } 

然后你可以从一个带有ReadDoubles(filename).Take(count)的文件中读取count双打。 ReadDoubles(filename).Take(count)

C ++标准库分别将bitshift运算符( <<>> )重载为“写入流”和“从流读取”。 在这种情况下, fin是一个文件流; fin >> num表示从文件中读取(直到下一个空格字符),解析数据以匹配变量num (整数)的格式,并将其存储到num

在这种情况下,>>运算符将数据从文件流流式传输到我认为是双精度的数据。 以下是代码在C#中的外观(如果您只是使用浮点数,则将8更改为4):

 using (var stream = System.IO.File.Open(file, System.IO.FileMode.Open)) { var data = new byte[8]; // temp variable to hold byte data from stream for(var x = 0; x < count; ++x) { stream.Read(data, 0, 8); num = System.BitConverter.ToDouble(data, 0); // convert bytes to double // do something with num } }