Yanıtlar:
Bu, söz konusu değer türünün boş değerli bir tür olduğu anlamına gelir
Null olabilecek türler, System örneğidir. Null edilebilir yapı. Bir boş değer, temel değer türü için doğru değer aralığını ve ek bir boş değeri temsil edebilir. Örneğin
Nullable<Int32>
, "Int32 Nullable" olarak telaffuz edilen a'ya -2147483648 ile 2147483647 arasında herhangi bir değer atanabilir veya null değeri atanabilir. A'yaNullable<bool>
true, false veya null değerleri atanabilir. Sayısal ve Boole türlerine null atama özelliği, özellikle veritabanları ve değer atanamayan öğeler içeren diğer veri türleriyle uğraşırken kullanışlıdır. Örneğin, bir veritabanındaki bir Boole alanı değerleri doğru veya yanlış depolayabilir veya tanımsız olabilir.class NullableExample { static void Main() { int? num = null; // Is the HasValue property true? if (num.HasValue) { System.Console.WriteLine("num = " + num.Value); } else { System.Console.WriteLine("num = Null"); } // y is set to zero int y = num.GetValueOrDefault(); // num.Value throws an InvalidOperationException if num.HasValue is false try { y = num.Value; } catch (System.InvalidOperationException e) { System.Console.WriteLine(e.Message); } } }
int
tür ve karşılık gelen bir Integer
sınıfın olduğu Java'yı düşündüğünüzü düşünüyorum .
Bunun için bir kestirme yol Nullable<int>
. Nullable<T>
, bir değer türünün ayarlanmasına izin vermek için kullanılır null
. Değer türleri genellikle boş olamaz .
value types
null olamaz. Bir değer atamadan bir int veya bool (değer türleri olan) bildirirseniz, yine de değerleri (sırasıyla 0 ve false) olur, yani. boş olmazlardı. reference types
Öte yandan, nesne veya Sınıfım gibi atanmamışlar boş olacaktır. Değer türleri ve referans türleri arasındaki farkı okumak isteyebilirsiniz.
İçinde
x ? "yes" : "no"
? if cümlesi bildirir . Burada: x , boole koşulunu temsil eder; Önceki kısım : olup daha sonra cümle ve yarı peşinde başka bir cümle.
Örneğin,
int?
? nullable türünü bildirir ve önceki türün null değere sahip olabileceği anlamına gelir.
return value ? value : "isNull";
bana string value
boole dönüştürülemez diyor.
Null olabilecek türler, System örneğidir. Null edilebilir yapı. Bir boş değer, temel değer türü için normal değer aralığını ve ek bir boş değeri temsil edebilir . Örneğin
Nullable<Int32>
, "Int32 Nullable" olarak telaffuz edilen bir [ ], -2147483648 ile 2147483647 arasında herhangi bir değer atanabilir veya null değer olarak atanabilir. Bir [Nullable<bool>
] değerine true veya false veya null atanabilir. Sayısal ve Boole türlerine null atama yeteneği, veritabanlarıyla ve değer atanamayan öğeler içeren diğer veri türleriyle uğraşırken özellikle yararlıdır. Örneğin, bir veritabanındaki bir Boole alanı değerleri doğru veya yanlış depolayabilir veya tanımsız olabilir.
türün null edilebilir olduğunu bildirir.
pratik kullanım:
public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
if (value == null)
{
return "bad value";
}
return someFunctionThatHandlesIntAndReturnsString(value);
}
Yukarıdaki yanıtlara eklemek için işte bir kod örneği
struct Test
{
int something;
}
struct NullableTest
{
int something;
}
class Example
{
public void Demo()
{
Test t = new Test();
t = null;
NullableTest? t2 = new NullableTest();
t2 = null;
}
}
Bu bir derleme hatası verir:
Hata 12 Boş olmayan bir değer türü olduğu için null değeri 'Test'e dönüştürülemiyor
NullableTest için derleme hatası olmadığına dikkat edin. (t2 bildirimindeki?
int?
kısaltmasıdır Nullable<int>
. İki form birbirinin yerine kullanılabilir.
Nullable<T>
T
kabul etmek için bir değer türüyle kullanabileceğiniz bir operatördür null
.
Bunu bilmiyorum durumda: değeri türleri olarak değerleri kabul türleridir int
, bool
, char
vs ...
Değerlere yapılan referansları kabul edemezler: Onlara referans türlerininnull
aksine , açıkça kabul edebilecekleri bir atarsanız derleme zamanı hatası oluştururlar .
Neden buna ihtiyacın var? Çünkü bazen değer türü değişkenleriniz, veritabanından döndürülen eksik veya tanımsız değişken gibi çok iyi çalışmayan bir şey tarafından döndürülen boş başvuruları alabilir.
Microsoft Belgeleri okumanızı öneririm çünkü konuyu oldukça iyi kapsar.