获取列表C中字符串的索引位置#

时间:2016-05-15 17:05:57

标签: c# loops position startswith

尝试获取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

        }
    }
}

2 个答案:

答案 0 :(得分:1)

有两个可能的原因:

  1. 您没有填写headerNames
  2. 您没有创建或初始化headerNames列表
  3. 请发布所有代码以检查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中创建新实例并再次读取该文件,从而重新使用该结果。