C# Nullable Ints - Kesalahan Kompilasi

Kenapa

            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 });

kompilasi, tapi ini

            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});

tidak? Kesalahan kompilasi untuk pernyataan kedua adalah "Jenis ekspresi kondisional tidak dapat ditentukan karena tidak ada konversi implisit antara 'int' dan null"

DC.AppData adalah

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

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


}

person Scott    schedule 04.02.2015    source sumber
comment
Mengapa menjejalkan semua itu dalam satu baris, jika Anda hanya menggunakan beberapa baris akan lebih mudah dibaca dan Anda tidak mengalami masalah seperti ini.   -  person Scott Chamberlain    schedule 04.02.2015


Jawaban (2)


Operator ternary di C# tidak mempercayai Anda untuk mengartikan null sebagai int?. Anda harus secara eksplisit memberi tahu kompiler C# bahwa yang Anda maksud adalah null menjadi int?...

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});

...atau int.Parse(app_data_type_id) adalah int? dengan melemparkannya...

(int?)int.Parse(app_data_type_id)

Salah satu operan hasil ternary harus secara eksplisit dilemparkan ke int?.

person Nick Strupat    schedule 04.02.2015

Masalahnya ada di sini:

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

int.Parse mengembalikan int yang tidak dapat dibatalkan

Anda perlu menjadikannya sebagai int?

(int?) int.Parse(app_data_type_id) : null
person bluetoft    schedule 04.02.2015
comment
Sebenarnya, kedua jawaban kami memberikan solusi yang berhasil. Tampaknya salah satu operan hasil ternary harus secara eksplisit int?, tetapi tidak keduanya. - person Nick Strupat; 04.02.2015