C# 重构选择验证程序的代码
我有一个数据表,必须验证其中的每个字段。我已经重构了下面的代码,但是复杂度是15!!我应该做一些像dictionary这样的东西,用type作为键,Func作为值吗?如果你能给我一些建议,我将不胜感激C# 重构选择验证程序的代码,c#,validation,if-statement,strategy-pattern,C#,Validation,If Statement,Strategy Pattern,我有一个数据表,必须验证其中的每个字段。我已经重构了下面的代码,但是复杂度是15!!我应该做一些像dictionary这样的东西,用type作为键,Func作为值吗?如果你能给我一些建议,我将不胜感激 private bool CheckField(DataRow dataRow, ValidationField validationField) { bool result = false; if (validationField.
private bool CheckField(DataRow dataRow, ValidationField validationField)
{
bool result = false;
if (validationField.Requiered)
{
if (validationField.Type == typeof (int))
{
result = this.CheckIntegerAndNotNull(dataRow[validationField.Name].ToString());
}
else if (validationField.Type == typeof (DateTime))
{
result = this.CheckDateTimeAndNotNull(dataRow[validationField.Name].ToString());
}
}
else
{
if (validationField.Type == typeof (int))
{
result = this.CheckIntegerOrNull(dataRow[validationField.Name].ToString());
}
else if (validationField.Type == typeof(DateTime))
{
result = this.CheckDateTimeOrNull(dataRow[validationField.Name].ToString());
}
else if (validationField.Type == typeof(string))
{
result = this.CheckStringOrNull(dataRow[validationField.Name].ToString(),
validationField.MaxLength.Value);
}
else if (validationField.Type == typeof(decimal))
{
result = this.CheckDecimalOrNull(dataRow[validationField.Name].ToString());
}
}
return result;
}
public class ValidationField
{
public Type Type { get; set; }
public string Name { get; set; }
public bool Requiered { get; set; }
public int? MaxLength { get; set; }
}
把这个从if语句中带出来
如果validationField.Type==typeof int
{
结果=this.CheckIntegerAndNotNulldataRow[validationField.Name].ToString;
}
如果validationField.Type==typeof DateTime,则为else
{
结果=this.CheckDateTimeAndNotNulldataRow[validationField.Name].ToString;
}
将dataRow[validationField.Name]的值保存到局部变量,也可以是dataRow[validationField.Name].ToString
对ValidationField使用开关。键入您可能需要创建枚举的类型
这个问题似乎离题了,因为它是关于检查工作代码的。试试看。我应该做一些像dictionary这样的东西,用type作为键,Func作为值吗是的,你能做到。