如果我有这样的东西怎么办:
if (data == null || (data != null && (data.Count() != 3 || data.IsNotCorrect()))
{
//error...
}
Run Code Online (Sandbox Code Playgroud)
数据== null然后是|| (data!= null)部分有些丑陋.那是如何在c#中解决这个问题的?
编辑:对不起!改变data.IsCorrect()以data.IsNotCorrect()
好.data.Count() != 3 || data.IsCorrect().你所说的是,如果计数为3,数据是不正确的.那么为什么额外的if条件而不是在内部进行检查?
if (data == null || data.IsCorrect())
{
//error...
}
Run Code Online (Sandbox Code Playgroud)
更新
对于将验证逻辑移到课堂内部,我的意思似乎很混乱.所有类都应负责确定适当的OOP中的有效状态.它被称为封装.
自从引入OR/Ms,mappers等以来,让调用者而不是类本身确定什么是正确的这一想法已经越来越多了.但事实是那些不验证自己信息的类不是真正设计合理的OOP课程.它们只是像DTO这样的容器.
这样做的危险在于,每个调用代码块都负责确保DTO包含正确有效的信息.这意味着n您的代码中有些地方可以引入错误而不仅仅是1.
这就是为什么我建议您将所有验证逻辑移到IsCorrect您想要调用的内部或任何您想要的内容中.但是如果你真的想根据基本的OOP原则进行编码,那么你就不应该让这个类进入一个不一致的状态.这就像我在下面的博客文章中描述的那样完成.
http://blog.gauffin.org/2012/06/protect-your-data/
你可以放弃(data != null && ... )(即离开...部分).
如果||求值之前的参数true(即为datanull),||则不评估after参数- 因此您不必担心空引用异常.这称为短路.
您可以删除第二项data != null检查,因为延迟评估,然后您不再需要parens因为您只剩下||运算符:
if (data == null || data.Count() != 3 || data.IsCorrect())
Run Code Online (Sandbox Code Playgroud)
当然上面有点怀疑(我本来希望看到的!data.IsCorrect()).
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |