循环中的LINQ查询检查空条件并寻找更干净的方式编写此代码

问题描述

我有代码遍历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;
}