2016-05-15 103 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

相关问题