在php中,我可以这样做:
$var = if($var2 == 3) ? $var : null;
但我怎么能在C#中做到这一点?
user_email.Content = if(dr["user_email"] == "") ? dr["user_email"] : null;
不起作用。
答案 0 :(得分:5)
user_email.Content = (dr["user_email"] != null && dr["user_email"] != "") ? dr["user_email"]: null;
?:运算符(C#)的语法:
condition ? first_expression : second_expression;
条件运算符(?:)根据布尔表达式的值返回两个值中的一个。条件运算符的格式为
答案 1 :(得分:4)
我宁愿按照以下方式重写它
user_email.Content = !string.IsNullOrEmpty(dr["user_email"]) ? dr["user_email"]: null;
答案 2 :(得分:1)
删除if
user_email.Content = dr["user_email"] == "" ? dr["user_email"]: null;
您将收到警告(可能是错误的结果):
可能的意外参考比较;得到一个价值比较, 施放左侧以输入'string'
所以你可以试试:
user_email.Content = dr["user_email"].ToString() == "" ? dr["user_email"]: null;
答案 3 :(得分:0)
它被称为ternary operator
user_email.Content = dr["user_email"] == "" ? dr["user_email"] : null;
由于将内容设置为string.Empty
,如果它是string.Empty
,否则设置为null
似乎有点疯狂,我怀疑你的实际意思是什么。
user_email.Content = dr["user_email"] == string.Empty ? null : dr["user_email"];
但是,如果dr["user_email"]
实际上已经是null
,那么您可以更好地使用以下内容,因为空值会在前面的示例中引发异常。
var emailValue = dr["user_email"];
user_email.Content = string.IsNullOrWhiteSpace(emailValue) ? null : emailValue;
使用emailValue
变量可以避免两次使用dr
访问器。
答案 4 :(得分:0)
要进行编译,只需删除if
:
user_email.Content = (dr["user_email"] == "") ? dr["user_email"]: null;
我想说这个操作符并不总是易于阅读,特别是在这种情况下(没有冒犯!)。为了使它更具可读性,我总是用三行写出来:
user_email.Content = (dr["user_email"] == "")
? dr["user_email"]
: null;
但这只是一个建议^ _ ^