C#Nullable Ints - 编译错误

时间:2015-02-04 04:50:59

标签: c# nullable

为什么

            int? nullInt = null;
            base.Response.Data = (new BusinessLogic.RefDataManager(base.AppSettingsInfo)).SelectAppData(new DC.AppData() { AppDataKey = app_data_key != string.Empty ? app_data_key : null, AppDataTypeId = app_data_type_id != string.Empty ? int.Parse(app_data_type_id) : nullInt });

编译,但是这个

            base.Response.Data = (new BusinessLogic.RefDataManager(base.AppSettingsInfo)).SelectAppData(new DC.AppData() { AppDataKey = app_data_key != string.Empty ? app_data_key : null, AppDataTypeId = app_data_type_id != string.Empty ? int.Parse(app_data_type_id) : null});

没有?第二个语句的编译错误是“无法确定条件表达式的类型,因为'int'和null之间没有隐式转换”

DC.AppData是

public class AppData
{
    [DataMember(Name = "AppDataKey")]
    public string AppDataKey { get; set; }

    [DataMember(Name = "AppDataTypeId")]
    public int? AppDataTypeId { get; set; }


}

2 个答案:

答案 0 :(得分:4)

C#中的三元运算符不相信您将null表示为int?。你必须明确地告诉C#编译器你的意思是nullint? ......

base.Response.Data = (new BusinessLogic.RefDataManager(base.AppSettingsInfo)).SelectAppData(new DC.AppData() { AppDataKey = app_data_key != string.Empty ? app_data_key : null, AppDataTypeId = app_data_type_id != string.Empty ? int.Parse(app_data_type_id) : (int?)null});

...或者int.Parse(app_data_type_id)int?,可以通过投射来实现......

(int?)int.Parse(app_data_type_id)

必须将三元yield操作数中的任何一个显式转换为int?

答案 1 :(得分:1)

问题在于:

app_data_type_id != string.Empty ? int.Parse(app_data_type_id) : null

int.Parse返回一个不可为空的int

你需要把它作为一个int?

(int?) int.Parse(app_data_type_id) : null