?: 运算符是 if-then-else 结构的扩展。
扩展在 then-block 和 else-block 中。如果 then-block 和 else-block 为 if-then-else 构造返回 void,它必须为 ?: 运算符返回一个类型。?: 运算符中类型的另一个约束是这两种类型必须相同。由于编译器将使用自动转换来使这两种类型相同,这一约束被稍微软化了。
使用 ?: 运算符的代码通常更短,但也更难阅读。这是用 ?: 运算符替换 if-then-else 结构时要考虑的一点。除非您的 then-block 和 else-block 是一个衬垫,否则很少值得用 ?: 运算符替换它。
if-then 结构是 if-then-else 结构的受限版本(反之亦然,if-then-else 结构是 if-then 结构的扩展)。由于 if-then 结构只有一个代码块,即 then-block,因此无法用 ?: 运算符替换 if-then 结构。您首先必须使用空的 else 块来扩展 if-then 结构。
例子:
// initialising an integer with an if-then construct.
int x = 0;
if (some_condition)
{
x = 1;
}
可以把它想象成 then 块返回一个整数。不能使用 ?: 运算符。
// initialising an integer with an if-then-else construct.
int y;
if (some_condition)
{
y = 1;
}
else
{
y = 0;
}
将 if-then 构造扩展为 if-then-else 构造,并将 then-block 和 else-block 视为返回一个整数,以表示类型一致 ;-) 彼此匹配。在这种情况下可以使用 ?: 运算符。
// initialising an integer with a ?: operator.
int z = (some_condition) ? 1 : 0;
关于您的代码:
var directory = new DirectoryInfo(path);
if (!directory.Exist())
{
directory.Create();
}
在这种情况下,我看不到使 then-block 返回值的明智方法。这使得使用 ?: 运算符变得不可能或非常复杂,因此代码丑陋。我的建议是,在这种情况下坚持使用 if-then 构造。