C # 'da null yapılabilir türlerle çalışma

C # dili iki tür veri için destek sağlar: değer türleri ve başvuru türleri. Bir tür değişkeni System.Stringbir başvuru türü iken , bir tür değişkeni Int32bir değer türüdür.

Bir değer türüne boş değer atamak, null yapılabilir türler kavramı ortaya çıkana kadar uzun bir süre zordu. Bir değer türüne doğrudan boş değer atayamazsınız. Bir değer türüne doğrudan boş değer atayamazsınız. Net Framework'ün daha yeni sürümlerine eklenen bir özellik olan null yapılabilir türlerden yararlanarak bir değer türüne null değer atayabilirsiniz.

Null yapılabilir türler, C # programlama dilinde tanıtılmıştır. Bunlar, adlı yapının örnekleridir System.Nullable. Null yapılabilir bir tür kullanırken, değer türü için izin verilen aralıktaki değerden ayrı olarak, null bir değere de sahip olabilirsiniz. Dolayısıyla, boş değer atanabilir bir Boolean değişkeniniz varsa, Boolean değişkenine atayabileceğiniz olası değerler true, false veya null içerir. Bu özellik, özellikle veritabanında bulunan verilerle çalışırken ve boş olabilecek veya olmayabilecek değer türlerine değerler atamak istediğinizde kullanışlıdır.

Yalnızca null yapılabilir değer türlerine sahip olabileceğinizi unutmayın - null yapılabilir başvuru türlerine sahip olamazsınız. Başvuru türleri null yapılabilir türler olamaz çünkü null desteği vardır - yani, herhangi bir başvuru türüne null değeri atayabilirsiniz. Bir değer türü System.ValueType, kendi bellek ayırmasından türetilir ve verileri içerir. Diğer bir deyişle, değişkenler veya nesneler veya değer türlerinin kendi veri kopyaları vardır.

Aksine, bir referans türü System.Objectbellekte gerçek verileri içeren bir konuma uzanır ve bu konuma işaret eder. Bir değer türü üzerinde kullanılabilen tekli ve ikili işleçlerin boş değer atanabilir karşılığına da uygulanabileceği unutulmamalıdır. Aşağıdaki kod parçacığı, C # 'da null yapılabilir bir tür tanımlamak için sözdizimini gösterir.

System.Nullable variable = null;

or

T? variable = null;

Burada Tdeğişkenin veri türünü temsil eder. Değer türüne boş değer atayamayacağınız için aşağıdaki ifade derlenmez.

Int32 i = null;

Bir değer türüne null değer atamak için, aşağıdaki kod parçacığında gösterildiği gibi null yapılabilir bir türden yararlanmanız gerekir.

Int32? i = null;

HasValueve Valueözellikleri

İki salt okunur özellik vardır HasValueve Valuenull atanabilir bir tür örneğinde. Birincisi, null yapılabilir değişkenin bir değer içerip içermediğini kontrol etmek için kullanılırken, ikincisi, null yapılabilir değişkenin içinde bulunan değeri almak için kullanılır. HasValueVarsayılan değerinin false olduğuna dikkat edin . Aşağıdaki kod listesi, HasValueve Valueözelliklerinin nasıl kullanılabileceğini gösterir.

 static void Main(string[] args)

        {

            Int32? i = 100;

            if (i.HasValue)

            {

                Console.WriteLine("The value of the variable i is: "+i.Value);

            }

            else

            {

                Console.WriteLine("The value of the variable i is undefined.");

            }

            Console.ReadLine();

        }

Aşağıdaki kod parçacığında gösterildiği gibi null yapılabilir bir değişkenin değerinin null olup olmadığını da kontrol edebileceğinizi unutmayın.

Int32? i = 100;

if(i != null)

Console.Writeline("The value of the variable i is not null");

Örtülü ve açık dönüştürmeler

Null değer atanabilir bir türü, açıkça veya Valueözelliği kullanarak null yapılamayan bir türe çevirebilirsiniz . Aşağıdaki kod parçacığı bunu göstermektedir.

Int32? i = null;

Int32 j = (Int32)i;

Null yapılabilir olmayan bir türe null yapılabilir bir tür durumunda ve null yapılabilir tür bir boş değer içeriyorsa, karşılaşacağınız not edilmelidir InvalidOperationException.

Aşağıdaki kod parçacığı, null yapılabilir bir türle çalışırken nasıl örtük bir dönüştürme yapabileceğinizi gösterir.

Int32? i = null;

i = 100;

Boş birleştirme operatörü ( ??)

Null birleştirme operatörü (olarak temsil edilir ??), null yapılabilir olmayan bir türe null atanabilir bir tür atadığınızda döndürülecek varsayılan değeri tanımlamak için kullanılır. İşte bunu gösteren bir kod örneği.

Int32? i = null;

Int32 j = i ?? 100;

Console.WriteLine("The value of the variable j is: " + j);

İ boş değilse değişkenin ideğeri atanır j. Değişkenin ideğeri boş ise, değişkene bir tamsayı değeri 100 atanır j. Boş birleştirme operatörü bu şekilde çalışır.