在一行if语句中声明变量

时间:2013-08-27 13:42:59

标签: c#

我想知道为什么c#中不允许使用这种语法?

var email = (User user = User.Current) != null ? user.Email : "default@mail.com";

如果允许:

User user;
var email = (user = User.Current) != null ? user.Email : "default@mail.com";

为什么必须已经定义变量,并且不能在语句中定义?

这有助于缩短线条,例如:

var email = User.Current.Very.Complex.Path != null ? User.Current.Very.Complex.Path.Email : "default@mail.com";

可能是

var email = (var user = User.Current.Very.Complex.Path) != null ? user.Email : "default@mail.com";

1 个答案:

答案 0 :(得分:3)

根据C#规范,不允许您尝试执行的操作。这基本上是因为变量声明/初始化是一个语句,而不是一个表达式(有关更多详细信息,请参阅Why can't we define a variable inside an if statement?;请将Pierre-Luc Pineault归功于链接)。

这是另一种方法,我认为它具有高可读性和简洁性:

var user = User.Current.Very.Complex.Path;
var email = user != null ? user.Email : "default@mail.com";