疑惑 关于 多条件判断语句 的写法

写法1
if ( 条件1 && 条件2)
{
      //代码
}
写法2
if ( 条件1 )
{
       if( 条件2 )
      {
            //代码
      }
}
我一直认为写法1要比写法2条理清晰,容易阅读.
不知其他人如何认为呢?
今天在微软的KB中阅读 使用 Visual Basic .NET 在采用基于表单身份验证的 ASP.NET 应用程序中实现基于角色的安全性 的时候
发现这样的写法

public void Application_AuthenticateRequest( Object src , EventArgs e )
{
if (!(HttpContext.Current.User == null))
   
{
if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" )
      
{
System.Web.Security.FormsIdentity id;
id 
= (System.Web.Security.FormsIdentity)HttpContext.Current.User.Identity;
String[] myRoles 
= new String[2];
myRoles[
0= "Manager";
myRoles[
1= "Admin";
HttpContext.Current.User 
= new System.Security.Principal.GenericPrincipal(id,myRoles);
      }

   }

}


而且这则KB的VB版本也是这样的写的.
这样写有优越性?

posted on 2004-08-21 17:11 武眉博<活靶子.Net> 阅读(5469) 评论(13)  编辑 收藏 所属分类: Asp.Net

评论

#1楼  2004-08-21 17:18 笨笨      

第一种方法,简明,容易阅读些~~

if (HttpContext.Current.User != null&&HttpContext.Current.User.Identity.AuthenticationType == "Forms" )
   {
}
我觉得这样的话,就不太好看啦~~也不容易阅读.

反倒第二种方法简单明了~~   回复  引用  查看    

#2楼  2004-08-21 18:39 zfphere      

一个太长的判断是不是显得很拥挤?第二种方法应该很好理解,并且我们习惯把容易不满足条件的判断放在前面。   回复  引用  查看    

#3楼  2004-08-21 21:04 大坏蛋      

我在写程序时,选择如何写就是看判断表达式是否很长至难阅读,如果是,就拆开写   回复  引用  查看    

#4楼  2004-08-21 23:40 赵雄(zx89@msn.com) [未注册用户]

如果不判断 HttpContext.Current.User 是否为 null
当HttpContext.Current.User  == null
HttpContext.Current.User.Identity.AuthenticationType == "Forms" 将产生异常。

欢迎与我交流C#应用心得   回复  引用    

#5楼  2004-08-22 00:51 FantasySoft      

楼上的,逻辑运算符都有短路效应,因此你说的情况是不会发生的。   回复  引用  查看    

#6楼  2004-08-22 02:16 寒枫天伤      

我觉得这个是仁者见仁,智者见智的问题。

这种写法取决于个人习惯以及团队代码规范中的规定。

1、有两个开关,它们之间是串联关系,而且必须打开第一个开关后,然后再打开一个开关灯才亮,如果第一个开关不开,打开了第二个开关,灯也不亮,这时应用:
if (.........)
{
if (..........)
{
}
}

2、有两个开关,它们之间的串联关系,但没有先后顺序,所以就用:
if (........)
{
}
if (........)
{
}

它们都可以用
if (....... 逻辑符号 .....)的形式来表达。
但有时这样写的代码显得太长时,就可以把if语句分割。

但在大一些的项目中,为了方便管理,我的处理方法是:把有子属关系的一定用层次性的if;非同类并且没有子属关系的,用两个if,如果是相同类相同层次的,则用if (XXX && XX)之类的写法。
仅供参考。   回复  引用  查看    

#7楼  2004-09-11 09:40 carter [未注册用户]

我还是看不懂,能不能在解释的清楚一点
最好有个实例(比如判考卷的试题)   回复  引用    

#8楼  2004-09-14 20:27 柚子Nan      

我觉得如果分开写还有一个好处,就是不会漏掉逻辑,
这样会提示你,if (false)会怎样?   回复  引用  查看    

#9楼  2005-01-17 11:37 zhy [未注册用户]

举个例子吧
'//代码片断
Set rs = conn.Execute("Select UserName,PassWord From UserTable")
if Not rs.Eof then
if rs("UserName") <> "" then
UserName = rs("UserName")
end if
end if
' //以上两个条件如果放在一起写成
If Not rs.Eof And rs("UserName")<>"" then
'//则当记录集为空时,会产生错误.   回复  引用    

#10楼  2005-05-20 15:03 登峰 [未注册用户]


条件是否分层写,要看情况,不过他这样的写法就感觉别扭
if(!(HttpContext.Current.User == null))
{
}
为什么不直接写成
if(HttpContextCurrent.User !=null)
{

}
还有,if( A !=null && A.Member =="Name")
假设A为null
我觉得也不会异常,没试过,猜的,我想编译器不笨到这地步吧



  回复  引用    

#11楼  2005-10-14 14:37 洒的发 [未注册用户]

别瞎鸡巴哔哔   回复  引用    

#12楼  2005-12-22 21:13 哈哈 [未注册用户]

可能是便于做自动单元测试吧!
复合条件不利于做条件覆盖测试。   回复  引用    

#13楼  2005-12-23 13:33 wwwwww [未注册用户]

有些鸡巴就知道在哔哔
把讨论的氛围搞得乌烟瘴气
人渣!!   回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-05-09 13:56 编辑过


相关链接:
 



导航

公告

广告开始
广告结束

本blog文字只代表靶子某一时间内的观点或结论,与本人所在公司没有任何关系,对其的正确性没有任何担保或假设,如要发表评论请先看清楚日期。 另:本人有权认定一个回复是否包含广告或者其他恶意内容并删除,谢谢!。

统计

与我联系

搜索

 

留言簿(51)

我参加的小组

我参与的团队

我的标签

随笔分类(186)

随笔档案(146)

相册

收藏夹(328)

常去链接

我的东西

友情博客

积分与排名

最新评论

阅读排行榜

评论排行榜

 武眉博联系电话:029-83099661  上官艳丽联系电话:029-83700139