最近在写代码的时候发现一个小bug,就是本来拿两条数据的,但是只拿了一条数据
最后发现是滥用 indexof 函数惹的锅
事情起源是我的代码有一个函数,将 list 的数据组成字符串并用逗号隔开。若是list的item 已经引用过的就不再进行引用。
foreach (string stritem in strList)
{
if (strset.IndexOf(stritem ) == -1)
{//若是有重复的引用一次即可
strset += stritem + ",";
}
}
但是那么巧那次两个数据分别是
ayss-tt-10
ayss-tt-1
本来显示的代码应该是 string str="ayss-tt-10,ayss-tt-1";
,但是因为先拿了ayss-tt-10
,str字符串就自然包含了ayss-tt-1
.自然就没有拿到后面的数据,后面就自然有错误了
解决方法是进行代码优化,通过一个新的list进行去除,如下
//列表去重并获取
List<string> lotList= new List<string>();
foreach (string stritem in strList)
{
if (lotList.Contains(stritem ))
{//记得contains函数若是对象的话就判断的是地址
continue;//去重
}
lotList.Add(stritem );
strset+= stritem + ",";//最后获取的数据
}
}
strset= strset.TrimEnd(new Char[] { ',' });//去掉最后的,
当然可以通过表达式对 list 进行去重后再进行获取的方法,这个更加推荐,js 和C# 都能使用
ist<User> nonDuplicateList2 =
users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i)
//nonDuplicateList2 是去重的函数
由于很多方法都能判断 字符串是否包含 某个字符串的方法,在可能的情况下尽量不要使用 indexof 方法了