double? PE = String.IsNullOrEmpty(txtHistoryPE.Text)?
null:Double.Parse(txtHistoryPE.Text)
上面的代码试图达到这样一个目的:如果文本框没有输入,则让变量PE保持为 'null' 。但是这段代码无法通过编译,编译错误如下:
Error: Type of conditional expression cannot be determined because there is no implicit conversion between 'null是引用类型,而double是值类型的,?:操作符无法应用到这两者上面。这可能跟大多数人预想的不太一样,一般会认为如果条件为true,那么PE等于null,否则执行Double.Parse的操作并就将结果赋给PE。翻译成代码就是这样的:' and 'double'
double? PE;
if (string.IsNullOrEmpty(txtHistoryPE.Text))
{
PE = null;
}
else
{
PE = double.Parse(txtHistoryPE.Text);
}
但是实际上如果我们真的把代码写成上面那样,恰恰是没有问题的。然而?:操作在这里需要做转型操作,需要对 'null' 做一个转型,将它转换为Nullable
double? PE = String.IsNullOrEmpty(txtHistoryPE.Text)
? (double?) null : Double.Parse(txtHistoryPE.Text)
或者使用default关键字,取double?的默认值null:
值得注意的是这里使用的是default(double?) 而非 default(double),这是因为后者返回0.0,而不是我们所需要的null
double? PE = String.IsNullOrEmpty(txtHistoryPE.Text)
? default(double?) : double.Parse(txtHistoryPE.Text)
没有评论:
发表评论