2016-05-15 78 views
-1

嘗試獲取List中字符串的索引位置,但它始終返回零(0)作爲索引整數變量。獲取列表C中字符串的索引位置#

任何想法是什麼錯?我已經嘗試更改爲public int等。

 public int GetLangPos(string cultureCode) 
    { 


     CsvRead csvRead = new CsvRead(); 


     int index = 0; 
     foreach (string line in csvRead.headerNames) 
     { 
      if (line.StartsWith(cultureCode)) { return index; } 
      index++; 
     } 
     return index; 
    } 

CsvRead類:

class CsvRead 
{ 

    public List<CsvLine> _csvLines = new List<CsvLine>(); //stores the csv lines 
    public List<string> headerNames = new List<string>(); //stores the headers of the csv file 

    public void GetValue() 
    { 

     /* 
     Key|Name|es-ES|fr-FR|ru-RU 
     web_key_001|Message|Mensaje|Message|Сообщение //row0 
     web_key_002|Close|Cerca|Fermer|Закрыть //row1 
     web_key_003|Administration|Administración|Administration|Aдминистрация //row2 
     web_key_004|Confirm|Confirmar|Confirmer|подтвердить //row3 
     web_key_005|Success|Éxito|Succès|Yспех //row4 
     */ 

     FileStream f = new FileStream(ConfigurationManager.AppSettings["TranslationsCsv"], FileMode.Open); 
     StreamReader streamReader = new StreamReader(f); 
     CsvConfiguration config = new CsvConfiguration(); 
     config.Delimiter = "|"; 
     CsvReader csvReader = new CsvReader(streamReader, config); 


     using (csvReader) 
     { 
      while (csvReader.Read()) 
      { 
       headerNames = csvReader.FieldHeaders.ToList<string>(); 



       CsvLine csvLine = new CsvLine(); 

       for (int i = 0; i < headerNames.Count(); i++) 
       { 
        csvLine.fieldValues.Add(csvReader.GetField<string>(headerNames.ElementAt(i))); 
       } 

       _csvLines.Add(csvLine); 


      } 


      //test section start 



      //test section end 

     } 
    } 
} 
+0

csvRead中有任何headerNames?看起來你沒有看到任何東西。 – PseudoAj

+0

請添加簡單的數據更好理解 –

+0

headerNames只包含5個元素。而cultureCode變量總是存在於headerNames列表中的某處。 – TingAli

回答

1

這個問題似乎是對象實例工作方式的一個誤解。

當您使用new運算符創建類的實例時,將創建該對象的新實例。該對象的實例字段(不含static修飾符)的值將屬於,該實例僅爲

如果你在Main一些實例調用GetValue,正如你提到的,那麼你在GetLangPos創建「新」的實例不會共享任何其他本實例的狀態。

由於您已經閱讀過該文件,您應該重新使用該實例的結果,而不是在GetLangPos中重新創建一個新文件並重新讀取該文件。

+0

乾杯隊友:)。 – TingAli

1

有2個可能的原因:

  1. 你不灌裝headerNames
  2. 沒有創建或初始化headerNames列表

請張貼所有的代碼檢查CsvRead內部構件

---- ----編輯

,你必須走線:

headerNames = csvReader.FieldHeaders.ToList<string>(); 

跳出while循環,即在所有迭代中讀取標題,文件末尾的行是空的。

csvReader.Read(); // read the headers 
headerNames = csvReader.FieldHeaders.ToList<string>(); 
while (csvReader.Read()) 
{ 
... 
} 
+0

剛剛發佈:) – TingAli

+0

我在哪裏放了那條線? :) – TingAli

+0

沒有什麼區別,但是謝謝。 – TingAli

相關問題