使用Parse()对任何具有Parse实现的T进行C#数据验证

Pau*_*ulG 2 c# validation

我正在简化我的代码(我喜欢为每个执行的函数编写最少量的行),而且我经常遇到冗长的数据验证过程.所以决定用伪代码编写一个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方法的类型上使用,在我看来应该有一种实现上述功能的方法...我只是不要知道我在找什么.一个接口不断出现在我的脑海中,但未能实现.

谢谢!

Ant*_*ram 6

框架提供者已经为你编写了你的​​函数,它被称为TryParse.它没有通用性质,但它的调用方式完全相同Validate.不妨使用已有的东西.

double var1;
if (!double.TryParse(input, out var1)) return "Invalid input";
Run Code Online (Sandbox Code Playgroud)

该方法适用于double,int,float,char,DateTime等.