C#Nullable Type问题

时间:2010-06-11 07:05:49

标签: c#

  

可能重复:
  Nullable types and the ternary operator. Why won’t this work?

例如:

int? taxid;
if (ddlProductTax.SelectedValue == "") {
  taxid = null; } 
else {
  taxid = Convert.ToInt32(ddlProductTax.SelectedValue);
} //Correct

但是

int? taxid;
taxid = (ddlProductTax.SelectedValue == "" ? null : Convert.ToInt32(ddlProductTax.SelectedValue)); //Error

它出错,而且int32无法隐式转换。

(?truepart:falsepart);是不是(如果......)......

5 个答案:

答案 0 :(得分:4)

三元运算符的最后两个操作数应该都产生相同的类型。

将任何一方投放到int?

taxid = ddlProductTax.SelectedValue == "" ?
                                 (int?)null
                                 : Convert.ToInt32(ddlProductTax.SelectedValue); 

您可以在规范中看到确切的行为:

答案 1 :(得分:1)

重复
为什么它的工作原理。 Nullable types and the ternary operator: why is `? 10 : null` forbidden?

以下是修复:

string x = "";
int? taxid;
taxid = (x == "" ? null : (int?) Convert.ToInt32(x)); // add the int? cast
Console.WriteLine(taxid);

答案 2 :(得分:0)

应用此更正,它应该有效。

int? taxid; 
taxid = (ddlProductTax.SelectedValue == "" ? null : new int?(Convert.ToInt32(ddlProductTax.SelectedValue))); //Now it works.

答案 3 :(得分:0)

这是一个小帮手方法

taxid = GetNullableInt32(ddlProductTax.SelectedValue);

public static int? GetNullableInt32(string str)
{
        int result;
        if (Int32.TryParse(str, out result))
        {
            return result;
        }
        return null;
}

答案 4 :(得分:0)

我认为这取决于表达式的评估方式。 使用? :构造时,两个结果都必须转换为相同的类型,此处null值和Int32之间没有隐式转换。

尝试:

taxid = (ddlProductTax.SelectedValue == "" )? Convert.ToInt32(null) : Convert.ToInt32(ddlProductTax.SelectedValue);