我正在学习c#并遇到以下问题,我找不到解决方案。
我正在尝试的代码是:
string theString = "aaa XXX,bbb XXX,ccc XXX,aaa XXX";
List<string> listFromTheString= new List<string>(theString.Split(','));
List<string> listOfFoundItems = new List<string>();
for (int i = 0; i < (listFromTheString.Count); i++)
{
if(listFromTheString[i].Contains("aaa"))
{
listOfFoundItems.Add(listFromTheString[i]);
}
}
如果找到特殊关键字,我想遍历列表并在新列表中创建新项目。列表listOfFoundItems没有填充创建者。
你能不能给我一个暗示我做错了什么?答案 0 :(得分:2)
您可以使用LINQ更简洁地完成此任务:
string theString = ("aaa XXX,bbb XXX,ccc XXX,aaa XXX");
List<string> listFromTheString = new List<string>(theString.Split(','));
List<string> listOfFoundItems = listFromTheString.Where(s => s.Contains("aaa")).ToList();
您提供的代码 可以正常工作。
这是一个替代的单行版本:
List<string> listOfFoundItems = theString.Split(',').Where(s => s.Contains("aaa")).ToList();
答案 1 :(得分:1)
theString.Split(',').Where(p=>p.Contains("aaa")).ToList()
答案 2 :(得分:0)
我知道你想要修复你的算法,但是一旦你这样做,考虑使用这个表达式:
listofFoundItems = (from s in theString.Split(',')
where s.Contains("aaa")
select s).ToList();
答案 3 :(得分:0)
您提供的代码运行正常。鉴于此,我怀疑你可能会遇到一些字符串比较问题。
此代码可能更适合您:
const string given = "aaa XXX,bbb XXX,ccc XXX,aaa XXX";
var givenSplit = new List<string>(given.Split(','));
var listOfFoundItems = new List<string>();
foreach(var item in givenSplit.Where(g => g.IndexOf("aAa", StringComparison.InvariantCultureIgnoreCase) > -1))
{
listOfFoundItems.Add(item);
}
// two items are added
答案 4 :(得分:0)
string theString = ("aaa XXX,bbb XXX,ccc XXX,aaa XXX");
List<string> listFromTheString = new List<string>(theString.Split(','));
List<string> listOfKeywords = new List<string> { "aaa" };
List<string> found = (from str in listFromTheString
where listOfKeywords.Any(keyword => str.Contains(keyword))
select str).ToList<string>();