Sözlükler (C # veya başka türlü), bir anahtara dayalı bir değer aradığınız bir kapsayıcıdır. Birçok dilde daha doğru bir Harita olarak tanımlanır ve en yaygın uygulama HashMap'tır.
Dikkate alınması gereken sorun, bir anahtar olmadığında ne olacağıdır. Bazı diller geri null
veya nil
başka bir eşdeğer değerle davranır . Bir değerin var olmadığını bildirmek yerine sessizce bir değeri varsayılan olarak ayarlamak.
Daha iyi ya da kötü için, C # kütüphane tasarımcıları davranış ile başa çıkmak için bir deyim ortaya çıktı. Var olmayan bir değeri aramak için varsayılan davranışın bir istisna atmak olduğunu düşündüler. İstisnalardan kaçınmak istiyorsanız, Try
varyantı kullanabilirsiniz . Dizeleri tamsayılara veya tarih / saat nesnelerine ayrıştırmak için kullandıkları yaklaşımla aynıdır. Temel olarak, etki şöyle:
T count = int.Parse("12T45"); // throws exception
if (int.TryParse("12T45", out count))
{
// Does not throw exception
}
Ve bu, dizinleyici delege olan sözlüğe iletildi Get(index)
:
var myvalue = dict["12345"]; // throws exception
myvalue = dict.Get("12345"); // throws exception
if (dict.TryGet("12345", out myvalue))
{
// Does not throw exception
}
Bu, dilin tasarlanma şeklidir.
Should out
değişkenler cesaretini?
C #, onlara sahip olan ilk dil değildir ve belirli durumlarda amaçları vardır. Yüksek düzeyde eşzamanlı bir sistem oluşturmaya çalışıyorsanız out
, eşzamanlılık sınırlarında değişkenleri kullanamazsınız .
Birçok yönden, dil ve çekirdek kütüphane sağlayıcıları tarafından benimsenen bir deyim varsa, API'larımdaki bu deyimleri benimsemeye çalışırım. Bu, API'yi bu dilde daha tutarlı ve evde hissettirir. Yani Ruby'de yazılmış bir yöntem C #, C veya Python'da yazılmış bir yöntem gibi görünmeyecektir. Her birinin kod oluşturmanın tercih edilen bir yolu vardır ve API'nızın kullanıcılarının bunu daha hızlı öğrenmesine yardımcı olacak şekilde çalışmaktır.
Haritalar Genel Olarak Bir Anti-Desen midir?
Amaçları vardır, ancak çoğu zaman sahip olduğunuz amaç için yanlış çözüm olabilirler. Özellikle çift yönlü bir eşlemeniz varsa ihtiyacınız vardır. Verileri düzenlemenin birçok kapsayıcı ve yolu vardır. Kullanabileceğiniz birçok yaklaşım vardır ve bazen bu kabı seçmeden önce biraz düşünmeniz gerekir.
Çok yönlü bir çift yönlü haritalama değerleri listeniz varsa, yalnızca bir grup listeye ihtiyacınız olabilir. Veya eşleştirmenin her iki tarafında ilk eşleşmeyi kolayca bulabileceğiniz bir yapı listesi.
Sorunlu alanı düşünün ve iş için en uygun aracı seçin. Bir tane yoksa, oluşturun.