静态方法与类实例和C#中的返回值

mar*_*vpc 1 c# error-handling class

我有各种类来处理表单数据和查询数据库.我需要一些关于减少从站点到站点编写的代码量的建议.

以下代码用于处理通过ajax发布到服务器的表单.它只是实例化一个Form类,验证数据并处理任何错误:

public static string submit(Dictionary<string, string> d){

    Form f = new Form("myform");

    if (!f.validate(d)){

        return f.errors.toJSON();

    }

    //process form...

}
Run Code Online (Sandbox Code Playgroud)

有没有办法将此减少到1行,如下所示:

if (!Form.validate("myform", d)){ return Form.errors.toJSON(); }
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 7

让我们将其分解为两个问题.

1)我可以在一个声明中写出现有的逻辑吗?

必须在自己的语句中声明局部变量,但初始化器不必存在.说完全合法:

Form f; 
if (!(f=new Form("myform")).validate(d))return f.errors.toJSON(); 
Run Code Online (Sandbox Code Playgroud)

为什么你想要超越我; 这样做是丑陋的,难以调试,难以理解,难以维护.但这完全合法.

2)我可以将此实例方法转换为静态方法吗?

可能不直接.假设你有两个调用者在两个不同的线程上验证东西,都调用静态Form.Validate方法,并且都产生错误.现在你有一场比赛.其中一个将赢得并填写Form.Errors.现在你有两个线程报告同一组错误,但其中一个错误是错误的.

将它变成静态方法的更好方法是将整个事物变成一个具有所需语义的静态方法,如在基座的答案中.

Errors errors = Validator.Validate(d);
if (errors != null) return errors.toJSON();
Run Code Online (Sandbox Code Playgroud)

现在代码非常清晰,Validate的实现很简单.创建一个表单,调用验证程序,返回null或错误.

我建议你不要求减少你编写的代码量.相反,请获取有关如何使代码读取更像其打算表示的含义的建议.有时这意味着编写更多代码,但代码清晰易懂.