C# LINQ在循环中查询空条件,并寻找更干净的方法来编写此代码

C# LINQ在循环中查询空条件,并寻找更干净的方法来编写此代码,c#,linq,C#,Linq,我把代码循环到JSON文件中的数据上,所以基于第一个、第二个或第三个变量的通配符条件,我在做正则表达式,然后把它写出来,我真的不喜欢它看起来的样子 因此,可读性和性能很重要,但数据完整性和错误处理等。。你也是 写这篇文章的更好方法是什么 for loop.... var firstWildCard = vidaBiliy.SponsorPackage.Where(s => Regex.IsMatch(s.ExternalPolicy, $"^.*{Regex.Esc

我把代码循环到JSON文件中的数据上,所以基于第一个、第二个或第三个变量的通配符条件,我在做正则表达式,然后把它写出来,我真的不喜欢它看起来的样子

因此,可读性和性能很重要,但数据完整性和错误处理等。。你也是

写这篇文章的更好方法是什么

for loop.... 

     var firstWildCard = vidaBiliy.SponsorPackage.Where(s => Regex.IsMatch(s.ExternalPolicy, $"^.*{Regex.Escape(HcdpPmtFctrCd)}{Regex.Escape(hccCpmtFctrCd)}$")).FirstOrDefault()?.PackageID;
     if(firstWildCard == null)
     {
         var secondWildCard = vidaBiliy.SponsorPackage.Where(s => Regex.IsMatch(s.ExternalPolicy, $"^{Regex.Escape(hcdpPlnCvgCD)}.*{Regex.Escape(hccCpmtFctrCd)}$")).FirstOrDefault()?.PackageID;
             if(secondWildCard == null)
             {
                 var thirdWildCard = vidaBiliy.SponsorPackage.Where(s => Regex.IsMatch(s.ExternalPolicy, $"^{Regex.Escape(hcdpPlnCvgCD)}{Regex.Escape(HcdpPmtFctrCd)}.*$")).FirstOrDefault()?.PackageID;

             }
     }
看看这个

var patterns = new string[]{
  $"^.*{Regex.Escape(HcdpPmtFctrCd)}{Regex.Escape(hccCpmtFctrCd)}$",
  $"^{Regex.Escape(hcdpPlnCvgCD)}.*{Regex.Escape(hccCpmtFctrCd)}$",
  $"^{Regex.Escape(hcdpPlnCvgCD)}{Regex.Escape(HcdpPmtFctrCd)}.*$"
}

var wildcards = new List<String>();

foreach (var pattern in patterns)
{
    var matchResult = vidaBiliy.SponsorPackage.Where(s => Regex.IsMatch(s.ExternalPolicy, pattern)).FirstOrDefault()?.PackageID;
    wildcards.Add(matchResult);
    
    if (matchResult != null) 
        break;
}
var模式=新字符串[]{
$“^.*{Regex.Escape(HcdpPmtFctrCd)}{Regex.Escape(hccCpmtFctrCd)}$”,
$“^{Regex.Escape(hcdpPlnCvgCD)}.*{Regex.Escape(hccCpmtFctrCd)}$”,
$“^{Regex.Escape(hcdpPlnCvgCD)}{Regex.Escape(HcdpPmtFctrCd)}.*$”
}
var通配符=新列表();
foreach(模式中的var模式)
{
var matchResult=vidaBiliy.SponsorPackage.Where(s=>Regex.IsMatch(s.ExternalPolicy,pattern)).FirstOrDefault()?.PackageID;
通配符。添加(匹配结果);
如果(匹配结果!=null)
打破
}

使用方法/lambda重构,如果需要,可以通过传递一些参数来复制代码。你能给我举个例子吗@奥利维耶·罗吉尔“德维凯·姆巴·奥卢”符合你的目标吗?