检查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字符串的值,而不是执行嵌套循环(因为如果不可能的话,这个循环将嵌套在另一个循环中)。

检查CSV字符串是否包含给定值c#

您可以使用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