按变量添加字符串时List <string>的问题

时间:2017-04-30 03:55:04

标签: c# string list

我想做一个没有重复项的列表,这个文件有太多带标识符的行,有时会重复。当我尝试使用List<string>.Contains时,它无法正常工作。我认为这是因为我直接添加对象而不是字符串。

public List<string> obterRelacaoDeBlocos()
{
    List<string> listaDeBlocos = new List<string>();

    foreach(string linhas in arquivos.obterLinhasDoArquivo())
    {
        string[] linhaQuebrada = linhas.Split('|');
        string bloco = linhaQuebrada[1].ToString();

        if (listaDeBlocos.Contains((string)bloco) != true)
        {
            listaDeBlocos.Add( bloco + ":" + listaDeBlocos.Contains(bloco).ToString());
        }
    }
    return listaDeBlocos;
}

1 个答案:

答案 0 :(得分:0)

在将字符串添加到列表之前,您将":" + listaDeBlocos.Contains(bloco).ToString()附加到字符串。如果您再次遇到相同的字词,则无法匹配,因此Contains将返回false,并且会再次添加相同的字词。

我不知道将": true"附加到列表中每个字符串的末尾有什么意义,所以只需删除该部分即可。

if (!listaDeBlocos.Contains(bloco))
{
    listaDeBlocos.Add(bloco);
}

由于您只对每个字符串的一部分感兴趣,根据您的分割方式,您可以使用LINQ重写您的方法。这是未经测试但应该有效:

public List<string> obterRelacaoDeBlocos()
{
   return arquivos.obterLinhasDoArquivo().Select(x => x.Split('|')[1]).Distinct().ToList();
}