Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重构选择验证程序的代码_C#_Validation_If Statement_Strategy Pattern - Fatal编程技术网

C# 重构选择验证程序的代码

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.

我有一个数据表,必须验证其中的每个字段。我已经重构了下面的代码,但是复杂度是15!!我应该做一些像dictionary这样的东西,用type作为键,Func作为值吗?如果你能给我一些建议,我将不胜感激

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作为值吗是的,你能做到。