2010-11-11 28 views
15

işlenenler için uygulanamaz Aşağıdaki C# kodu vardır:Operatör '??' türü 'dizesi' ve 'System.DBNull'

sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value); 

Ama şu derleme hatası atar:

Operator ?? cannot be applied to operands of type string and System.DBNull

Neden hiç' Derleyici bu sözdizimine izin veriyor mu?

+0

Belki 'çünkü ?? operatörü her iki tarafta aynı tip olmasını bekliyor? – kite

cevap

29

Her iki işlenenin de nesne olması gerekir. açık döküm kullanın:

(object)table.Value ?? DBNull.Value; 
+7

Bu gerçekten doğru değil, derleme hatası oluşmasının nedeni her iki işlenen için değil mi ?? nesne olması gerekir. Açık bir kadro olmadan ((nesne) ile cevap olarak verilir) mevcut bir örtük döküm olması gerekir. Dize ve System.DBNull arasında örtük bir yayınlanmadığından, derleyici hatasını alırsınız. –

+5

Seçici olmaya çalışmayın, sadece yazar (hataya nasıl ulaşacağını bildiğini söyleyen) yazarın her iki işlenenini düşünerek gitmesinden endişe edebilir mi? Operatörün daima nesne olması gerekir. Onun sorusu * neden * derleyicinin böyle sevmediği * nasıl * onu tamir ediyorum. –

+1

@AndrewBarrett Alright! Nasıl tamir edersin? :) – Axel

7

string ve System.DBNull arasında örtük bir dönüşüm olmadığından.

15

string ve System.DBNull arasında otomatik bir dönüşüm yoktur bu yüzden object bir döküm ekleyerek açıkça istediğiniz türü belirtmek gerekir:

sqlCommandObject.Parameters.AddWithValue("@Parameter", 
             table.Value ?? (object)DBNull.Value);