三元运算符c#

时间:2012-07-12 12:17:44

标签: c#

在php中,我可以这样做:

$var = if($var2 == 3) ? $var : null;

但我怎么能在C#中做到这一点?

user_email.Content = if(dr["user_email"] == "") ? dr["user_email"] : null;

不起作用。

5 个答案:

答案 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;

但这只是一个建议^ _ ^