比较文本字符串,如果任何条件不匹配则通过异常


List<string> columnNames = new List<string>();
// Valid column names
columnNames.Add("IDRef"); 
columnNames.Add("RiskAssessmentTitle");
columnNames.Add("RiskAssessmentDate");
columnNames.Add("RiskAssessmentLabel");
columnNames.Add("Likelihood");
columnNames.Add("Impact");
// Anything with prefix DD - , MD - , DT - , RT - , FT - is valid column name
columnNames.Add("DD - IDRef"); 
columnNames.Add("MD - RiskAssessmentTitle");
columnNames.Add("DT - RiskAssessmentDate");
columnNames.Add("RT - RiskAssessmentLabel");
columnNames.Add("FT - Likelihood");
columnNames.Add("FT - Impact");

// Invalid column names
columnNames.Add("IDRefIDref");  // Invalid column names
columnNames.Add("RiskAssessmentTitle-title"); // Invalid column names
columnNames.Add("RiskAssessmentDate-title"); // Invalid column names
columnNames.Add("RiskAssessmentLabel-lable"); // Invalid column names
columnNames.Add("Likelihood-something"); // Invalid column names
columnNames.Add("Impact-impact-impact"); // Invalid column names

Need to do the validation to check the above condition
foreach(string columnName in columnNames){
await ValidateColumns(columnName)
}
async Task ValidateColumns(string columnName, int i)
{
columnName.Trim();
if (!columnName.EndsWith("IDRef") ||
!columnName.EndsWith("RiskAssessmentTitle") ||
!(columnName.EndsWith("RiskAssessmentDate")) ||
!(columnName.EndsWith("RiskAssessmentLabel")) ||
!(columnName.EndsWith("Likelihood")) ||
!(columnName.EndsWith("Impact")))
throw new KeyNotFoundException("ImportInvalidFieldRowNumber"));
} 

上面的函数在循环中调用。因此,对于上述所有条件,如果存在有效列,它总是抛出KeyNotFoundException。比较传递和抛出异常的最佳方法是什么?

老实说,这个if语句不是一个好主意,如果有很多前缀和列名,我将使用2HashSets

var prefixes = new HashSet<string>{ "DD", ... };
var columnNames = new HashSet<string>{ "IDRef", ... };
bool IsValidColumnName(string columnName)
{
var p = columnName.IndexOf(" - ");
if(p > 0)
return prefixes.Contains(columnName.SubString(0, p)) &&       
columnNames.Contains(columnName.SubString(p + 3));
else
return columnNames.Contains(columnName);
}

最新更新