检查CSV字符串是否包含给定值c#
本文关键字:包含 CSV 字符串 是否 检查 | 更新日期: 2023-09-27 18:10:54
我正在读取一个以逗号分隔的数字id列表,该列表存储为字符串。我需要检查id是否已经存在于列表中。例如:
"1、2、3"
如果我检查"2",我应该找到它,但如果我检查"22",我应该找不到。
最直接、最简洁的方法是什么?
我现在的代码如下:
HttpCookie cookie = Request.Cookies.Get("wishlist");
if (cookie != null)
{
var JSONstring = cookie.Value; //Cookie stored as JSON
Dictionary<string, List<dynamic>> jObj = JsonConvert.DeserializeObject<Dictionary<string, List<dynamic>>>(JSONstring);
// Retreive only the nodeId of each item and store it in a CSV list
string umbracoCSV = String.Join(",", jObj.SelectMany(x => x.Value).Select(x => x.nodeId));
// Convert the CSV into an IEnumerable list of ints
IEnumerable<int> umbracoNodeIdList = umbracoCSV.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse);
foreach(int umbracoNodeId in umbracoNodeIdList){
if(umbracoNodeId == 2){
// Do code if it matches
}else{
// Do code if it doesn't match
}
}
}
正如您所看到的,这段代码包含了一个相当不必要的循环,我真的希望能够直接解析CSV字符串的值,而不是执行嵌套循环(因为如果不可能的话,这个循环将嵌套在另一个循环中)。
您可以使用Any
方法来简化代码:
bool isExists = umbracoCSV.Split(',').Any(x => x == "2");
if(isExists) { }
这里有几个选项:
-
查找字符串
中的2
if(umbracoCSV.Contains(",2,") //,2, is to rule out 22 //Do something
-
使用正则表达式代替
String.Contains
-
拆分字符串并对其使用
Any
var toArray = umbracoCSV.Split(','); if(toArray.Any(x => x == "2") //Do something
-
如果你仍然使用
IEnumerable<int>
,你也可以使用Any
if(umbracoNodeIdList.Any(x => x == 2) //Do something