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