三目运算,别名 三元运算,三联表达式
个人喜欢三联表达式,
错误原因:
在一个三联表达式中最终只能返回一种数据类型,如你代码
(sqlquerystr += " and ") 由于和string类型做了运算,所以这里返回的是string类型
(flag_forand += 1) 这里两个都是int类型,所以返回的是int类型,
解决方法:
ps:因为不知道你后面业务需求的实现代码,所以这个绝对不是最优化的解决办法,但是解决了三元表达式的问题
string sqlquerystr = "";int flag_forand = 0;
string oupt = (flag_forand != 0) ? (sqlquerystr += " and ") : (flag_forand += 1).ToString();//这里把int转成string,使得两个都返回string类型的数据
int outint;if (int.TryParse(oupt, out outint))//该方法会尝试转换字符串,如果转换成功则返回true,反之则返回false
{
//如果转换成功,说明最终返回的是数字类型的,也就是(flag_forand += 1)的
//todo......
}
else
{
//如果转换不成功,说明最终返回的是string,也就是(sqlquerystr += " and ")的
//todo......
}
楼上
sqlquerystr += flag_forand != 0 ? " and " : "";
flag_forand += flag_forand != 0 ? 1 : 0;
这种用法也很好,如果业务需求允许,可以考虑
三目运算是有规则的,比如 A?B:C,这里B 和C 是同一类型,比如:B 和C 都是int或者都是string.
,楼主根本没有搞懂,所以才问这个2B的问题,下面还有2B的人回答得那么长。
问号表达式,不是语句,如果if和else下用来操作的对象不一样,就不会用这种方式写。
sqlquerystr += flag_forand != 0 ? " and " : "";
flag_forand += flag_forand != 0 ? 1 : 0;
flag_forand!=0?(sqlquerstr+="and"):(flag_forand+=1);