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



我有代码在JSON文件中的数据上循环,因此根据第一个、第二个或第三个变量的通配符条件,我正在做regex,然后把它写出来,我真的不喜欢它的样子。

所以可读性和性能很重要,但数据完整性和错误处理等也很重要

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

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;
}

最新更新