Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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#_Oop - Fatal编程技术网

C# 是否应合并不同代码块的验证?

C# 是否应合并不同代码块的验证?,c#,oop,C#,Oop,我的C#类中有一个函数: 课堂乐趣{ 私人串水枪; 私人绳套; void HaveSomeFun(布尔萨默斯){ 水枪= 夹套= 验证(); 国际单项体育联合会(夏季){ WriteLine(“使用{0}”,水枪); }否则{ WriteLine(“使用{0}”,护套); } } 私有void validate(){ ArgumentValidationHelper.ValidateNotNullOrEmpty(“水枪”,this.WaterGun); ArgumentValidationHel

我的C#类中有一个函数:

课堂乐趣{
私人串水枪;
私人绳套;
void HaveSomeFun(布尔萨默斯){
水枪=
夹套=
验证();
国际单项体育联合会(夏季){
WriteLine(“使用{0}”,水枪);
}否则{
WriteLine(“使用{0}”,护套);
}
}
私有void validate(){
ArgumentValidationHelper.ValidateNotNullOrEmpty(“水枪”,this.WaterGun);
ArgumentValidationHelper.ValidateNotNullOrEmpty(“夹克”,this.Jacket);
}
}
我制作变量实例成员只是为了验证。仅仅为了验证而将变量的范围从一个方法增加到一个类,这有意义吗


如果验证是集中的,并且变量不需要是类成员,那么有没有其他(更好的)方法来实现此功能?

首先,我不确定为什么您的成员变量是私有的。那是打字错误吗?如果用户无法更改它们,则不需要验证它们

假设您实际上是公共的,可以考虑将成员变量转换为属性,并在SETER中进行验证。然后您可以抛出一个错误或将其设置为某个默认值。我更喜欢这种方法,因为它确保类始终处于有效状态(假设调用代码合理地处理错误…),而不是每次使用它时都必须调用validate()

如果要将它们保留为参数,还可以创建一个帮助器类:

class FunArguments {
    private string waterGun;
    public string WaterGun { 
       get { return waterGun; }
       set { 
            //do some validation check here
            waterGun = value;
       }
    }
    // etc..
}

然后您可以通过某种方式将其传递给Fun。

根据您的代码,验证逻辑已经集中化(我希望这是您/某人创建
ArgumentValidationHelper
类时的全部意图。此外,我觉得,添加
Validate
方法只是为了包装这两个验证,是没有必要的,除非您需要在其中添加其他内容

我觉得,您知道这些类变量不是必需的,是的,它们没有任何意义,因为它们(A)是私有的(B)不会通过调用代码来设置

因此,我的代码版本是:

class Fun {
    void HaveSomeFun(bool summers) {
        string waterGun = <Some Value>
        string jacket = <Some Other Value>

        ArgumentValidationHelper.ValidateNotNullOrEmpty("WaterGun", waterGun);
        ArgumentValidationHelper.ValidateNotNullOrEmpty("Jacket", jacket);

        if(summers) {
            Console.WriteLine("Using {0}", waterGun);
        } 
        else {
            Console.WriteLine("Using {0}", jacket);
        }
    }
}
课堂乐趣{
void HaveSomeFun(布尔萨默斯){
串水枪=
绳套=
ArgumentValidationHelper.ValidateNotNullOrEmpty(“水枪”,水枪);
ArgumentValidationHelper.ValidateNotNullOrEmpty(“夹克”,夹克);
国际单项体育联合会(夏季){
WriteLine(“使用{0}”,水枪);
} 
否则{
WriteLine(“使用{0}”,护套);
}
}
}

如果你足够勇敢,你可以使用。这是一个与数据注释相关的问题。我的问题是:将变量的范围从一个方法增加到一个类只是为了验证,这有意义吗?你建议让它们成为实例成员。这有什么原因吗?这取决于变量的来源,我认为从你的代码看不出来。仅仅写
不是很清楚。这听起来很合理。我猜仅仅为了验证而将变量的范围从方法增加到类并不是一个好策略。
class Fun {
    void HaveSomeFun(bool summers) {
        string waterGun = <Some Value>
        string jacket = <Some Other Value>

        ArgumentValidationHelper.ValidateNotNullOrEmpty("WaterGun", waterGun);
        ArgumentValidationHelper.ValidateNotNullOrEmpty("Jacket", jacket);

        if(summers) {
            Console.WriteLine("Using {0}", waterGun);
        } 
        else {
            Console.WriteLine("Using {0}", jacket);
        }
    }
}