三目运算符在原理上基本都可以转化为 if{....}else{....}语句,但是在实际的开发过程中,两者是可以用在不同的地方的。
比如: 有一个实体类叫 Person ,里面有一些相关的属性如下:
public string Name {get;set;}
public string Location{get;set;}
public int? Age{get;set;}
public string PhoneNumber{get;set;}
public string EmailAddress{get;set;}
等等
假如你在开发一个应用系统,需要根据注册用户知道获得用户的相关信息,那么用户在你的网站注册的时候,你可以new一个 Person,如下:
当用户在注册页面写好了各种资料之后,点击“确定注册”按钮,那么方法中就可以抓取到不同的信息插入到数据库不同的表中的不同字段中,当然前提是你做好了这些接口
..........
private void AddNewUser(...... e, ........)
{
Person person = new Person()
{
Name = string.IsNullorEmpty(txtUserName.text) ? txtUserName.text : string.empty,
Location = string.IsNullorEmpty(cbxLocation.selecteditem) ? cbxLocation.selecteditem : string.empty,
Age= if(cbxAge.selecteditem.selecteditem != null) ? convertToInt32( cbxLocation.selecteditem) : null,
........
};
到此为止只和这个注册的人相关,下面接着调用BLL层的方法将这个人person作为参数传到bll里面处理后插入到数据库,这里不说了
}
就像上面的,这个时候用到三目运算符就比较合适,代码看起来非常简洁明了。可以很容易的做各种验证和判断。在new的这一个Person当中,你就可以支专注于这个人的实例上面,而不去被其他的代码所打扰,尤其是在你的页面代码达到几千行的时候,你可以很快的查找问题。
当然,其实上面的代码可以改写为 if{....}else{....}的形式,那样虽然没有错误,但是会让页面代码看起来很乱,看下面:
Person person = new Person();
if(string.IsNullorEmpty(txtUserName.text) == false)
{
person.Name = txtUserName.text;
}
else
{
......
}
if(string.IsNullorEmpty(cbxLocation.selecteditem))
{
person.Location = cbxLocation.selecteditem.tostring();
}
else
{
......
}
。。。。。。
。。。。。。
上面仅仅才写了person两个属性,就写了那么一大堆代码了,你看的爽不爽啊。优点之一就出来了。
当然,这是我理解的其中之一,可能还有其他的用处,你可以参考一下
(上面的示例代码是手写的,可能有不对的地方,凭着印象写的,仅仅为了解释你说的问题)
|