Category: C#

Nullable

Item nesnelerini tuttuğunuz bir liste düşünün. Item nesnelerinizde de string name ve int price değişkenleri tanımlı. Fiyatı belli olmayan Item’larınızın price değişkenlerine ne atardınız? Bu price değerinin atanmış olup olmadığını daha sonra nasıl kontrol ederdiniz?

Bu sorunun aklıma gelen 3 çözümü var.

  1. Item nesnesine ait değer tipindeki Price değişkenini, referans tipinde bir wrapper yoluyla tanımlamak. Böylece bu wrapper null tanımlanabilir ve Price’ın atanmamış olduğunu anlarız.
  2. Değer atanıp atanmadığına dair boolean bir flag tutmak.
  3. Price değişkenine Int.MinValue gibi aşırı küçük ya da Int.Max gibi aşırı büyük bir değeri atamak.

Bu üç yolun dışında uygulayabileceğiniz bir yol daha var. Price değişkenini Nullable (Boş değer atanabilir) olarak atamak.

Item Nesnesi

public class Item {
public string Name;
public int? Price;//nullable olarak tanımladık

public Item(string name, int? price = null)//Eğer price ataması yapılmamışsa, price null atansın
{
Name = name;
Price = price;
}
}

Item Manager Nesnesi

    private List<Item> _items;
void Start ()
{
GenerateItems();
GetNullPriceItems();
}

private void GenerateItems()
{
_items = new List<Item>
{
new Item("A"),
new Item("B", 50),
new Item("C"),
new Item("D", 123)
};
}

private void GetNullPriceItems()
{
for (int i = 0; i < _items.Count; i++)
{
if (_items[i].Price == null)
{
Debug.Log(_items[i].Name);//çıktı olarak A ve C'yi alırız
}
}
}

Referanslar

John Skeet — C# In Depth