我正在简化我的代码(我喜欢为每个执行的函数编写最少量的行),而且我经常遇到冗长的数据验证过程.所以决定用伪代码编写一个Validate函数:
public static bool Validate(string input, out object output){
// try to parse data
try {
(TypeOf(object)) output = new (TypeOf(object));
output = (TypeOf(object)).Parse(input);
return true;
} catch {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我在我的代码中使用它来验证几个文本框,它看起来很好并且非常易读:
double var1;
Int32 var2;
byte var3;
if (!Validate(txtDouble.text, var1)) return "Error validating a Double";
if (!Validate(txtInt32.text, var2)) return "Error validating a Int32";
if (!Validate(txtByte.text, var3)) return "Error validating a byte";
// else all data is valid, continue
Process(var1, var2, var3)
Run Code Online (Sandbox Code Playgroud)
我可以为每种类型创建一个静态类Validate和重载,但由于我打算在包含Parse方法的类型上使用,在我看来应该有一种实现上述功能的方法...我只是不要知道我在找什么.一个接口不断出现在我的脑海中,但未能实现.
谢谢!
框架提供者已经为你编写了你的函数,它被称为TryParse.它没有通用性质,但它的调用方式完全相同Validate.不妨使用已有的东西.
double var1;
if (!double.TryParse(input, out var1)) return "Invalid input";
Run Code Online (Sandbox Code Playgroud)
该方法适用于double,int,float,char,DateTime等.