尝试获取List中字符串的索引位置,但它继续返回零(0)作为索引整数变量。
任何想法有什么不对?我已经尝试过更改为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 :(得分:1)
有两个可能的原因:
请发布所有代码以检查CsvRead内部
----编辑----
你必须采取行:
headerNames = csvReader.FieldHeaders.ToList<string>();
out of while循环,即在所有迭代中读取标题,并且文件末尾的行为空。
csvReader.Read(); // read the headers
headerNames = csvReader.FieldHeaders.ToList<string>();
while (csvReader.Read())
{
...
}
答案 1 :(得分:1)
这个问题似乎是对象实例如何运作的误解。
使用new
运算符创建类的实例时,可以创建该对象的新实例。该对象的实例字段(没有static
修饰符的字段)的值将属于仅该实例。
如果您在GetValue
中的某个实例上调用了Main
,正如您所建议的那样,那就是&#39; new&#39;您在GetLangPos
创建的实例将不会共享此其他实例的任何状态。
由于您已经阅读过该文件,因此您应该重新使用该实例,而不是在GetLangPos
中创建新实例并再次读取该文件,从而重新使用该结果。