2016-11-23 52 views
1

我試圖將C++類轉換爲C#,並遇到了二元右移運算符'>>'的兩個錯誤。流右移運算符在C#中等價嗎?

這是一部開拓創新C++代碼轉換爲C#(不進行編輯):

public static void ReadSeatPrices() 
    { 
     ifstream fin = new ifstream(); 
     fin.open("SeatPrices.txt"); 
     int i = 0; 
     while (fin != null) 
      { 
       fin >> seatprices[i]; 
       i++; 
      } 
     fin.close(); 
    } 

當編譯在Visual Studio中類起初由於ifstream發生2015多個錯誤,所以自然我編輯的代碼,以除去這些錯誤,現在它看起來像這樣:

public static void ReadSeatPrices() 
    { 
     FileStream fin = new FileStream("seat.txt", FileMode.Open, 
      FileAccess.Read); 
     int i = 0; 
     while (fin != null) 
     { 
      fin >> seatprices[i]; 
      i++; 
     } 
     fin.Close(); 
    } 

現在我只剩下兩個錯誤是由這一行造成的:

fin >> seatprices[i]; 

錯誤列表輸出指出:

「操作員 '>>' 不能應用於類型的操作數 '的FileStream' & '雙師型'

只有分配,調用,遞增,遞減,並且可以使用新的對象表達式作爲語句。

是否存在某種我必須在C#中使用的等價運算符?如果有人能幫助我理解我的錯誤,我將不勝感激。

回答

3
public static void ReadSeatPrices() { 
    using (var reader = new StreamReader(File.OpenRead("seat.txt"))) { 
     int i = 0; 
     while (!reader.EndOfStream) { 
      var double result; 
      if (double.TryParse(reader.ReadLine(), out result)) { 
       seatprices[i] = result; 
       i++; 
      } else { 
       //something goes wrong 
      } 
     } 
    } 
} 

如果您無法保證可以進行轉換,請使用TryParse()。如果您確定轉換始終有效,您可以消除if並僅使用Parse()

您應該使用StreamReaderReadLine()方法(這是該作業的正確類)讀取流。對於此,C#沒有>>運算符重載。使用using。 C#沒有自動RAII

將代碼從一種語言翻譯成另一種語言並不是一對一的,你需要找到合適的習慣用法。

+0

seatprices [i] = reader.ReadLine();我有一個錯誤,這表明我不能隱式地將字符串轉換爲double @bigown – DevonJ901

+0

@ DevonJ901你的問題並不清楚,但我試圖在編輯中回答這個問題。 – Maniero

+1

我想通了!感謝你的付出。 – DevonJ901

2

如果我沒有記錯

fin >> seatprices[i]; 

被分配值從finseatprices[i]

在這種情況下,所有你做的是逐行讀取文本行,這MSDN example 將有助於

+0

非常感謝您的好意,我會回顧一下這個例子。 – DevonJ901