Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
İpucu
Bu makale, en az bir programlama dili bilen ve C# dilini öğrenen geliştiriciler için Temel Bilgiler bölümünün bir parçasıdır. Programlamaya yeni başladıysanız ilk olarak Başlangıç öğreticileri ile başlayın.
Java'den mi yoksa C++'tan mı geliyorsunuz? C# null kabul eden başvuru türleri aracılığıyla derleme süresi null güvenliği sağlar. Hedef, Java @NonNull ek açıklamalarına benzer ancak derleyici tarafından zorlanır. C#, ?. ve ?? gibi null güvenli ifadeleri kısa ve öz hale getiren özel operatörlere de sahiptir.
null bir değerin yokluğunu temsil eder. Bir başvurudaki null bir üyeye bir yöntemi çağırarak veya bir özelliği okuyarak erişmeye çalıştığınızda, çalışma zamanı bir NullReferenceException oluşturur:
// Accessing a member on null throws NullReferenceException at runtime:
// string? name = null;
// int length = name.Length; // throws NullReferenceException
// Check before you dereference:
string? name = null;
if (name is not null)
{
Console.WriteLine($"Name has {name.Length} characters.");
}
else
{
Console.WriteLine("Name has no value.");
}
// Output: Name has no value.
C# size null güvenli kod yazmak için üç tamamlayıcı araç sağlar:
-
Null atanabilir değer türleri:
intgibi bir değer türü veyabool,nulldeğerini de tutabilir. -
Null atanabilir başvuru türleri: Derleyicinin bir başvurunun null olabilme durumunu izlemesine izin verin
null - Null işleçler: null güvenli erişimi ve geri dönüş mantığını kısa bir şekilde ifade edin
Null değeri alabilen değer türleri
Değer türleri, örneğin int, double ve bool, varsayılan olarak null tutamaz. Tür adına ? ekleyerek, ya bir değer ya da içeren bir null oluşturabilirsiniz.
int? score = null;
Console.WriteLine(score.HasValue); // False
score = 95;
Console.WriteLine(score.HasValue); // True
Console.WriteLine(score.GetValueOrDefault()); // 95
int? missing = null;
Console.WriteLine(missing.GetValueOrDefault(-1)); // -1
Temel bir değer türünün "veri yok" değerini temsil etmesi gerektiğinde boş atanabilir değer türleri yararlıdır. Yaygın senaryolar arasında var olmayan veritabanı sütunları, isteğe bağlı yapılandırma ayarları ve henüz elde edilmemiş algılayıcı okumaları bulunur.
Bildirim, denetim ve dönüştürmenin tam kapsamı için bkz. Nullable değer türleri.
Null değer alabilen referans türleri
string gibi başvuru türleri, diziler ve sınıf örnekleri çalışma zamanında null tutabilir.
Null atanabilir başvuru türleri , null amacı açık hale getiren ve derleme zamanında hataları yakalayan bir derleyici özelliğidir.
Ek açıklamayı ? kullanarak amacınızı bildirirsiniz:
-
string?— bu başvuru olabilirnull; önce denetlemeden başvuruyu kaldırmanız durumunda derleyici uyarır -
string— bu referans olmamalıdırnull; buna bir değer atarsanız derleyici sizi uyarır
// string? means this reference might be null
// string means this reference should not be null
string? nullableName = null;
string nonNullName = "Alice";
// ?. safely accesses a member when the reference might be null
string display = nullableName?.ToUpper() ?? "(no name)";
Console.WriteLine(display); // (no name)
display = nonNullName.ToUpper(); // safe: nonNullName is never null
Console.WriteLine(display); // ALICE
Modern SDK şablonlarının oluşturduğu tüm .NET projeleri, varsayılan olarak null atanabilir başvuru türlerini etkinleştirir. Etkinleştirme ve açıklama ekleme konusunda tam yönergeler için bkz. Null atanabilir başvuru türleri.
Null işleçler
C# her yerde el ile if-null korumaları olmadan null güvenli kod yazmanıza olanak sağlayan birkaç işleç içerir:
| Operator | Name | Purpose |
|---|---|---|
?. |
Null koşullu üye erişimi | Üyeye yalnızca nesne null olmadığında erişin |
?[] |
Null koşullu dizin oluşturucu erişimi | Bir öğeye yalnızca koleksiyon null olmadığında erişin |
?? |
Null birleştirme | İfade null olduğunda yedek bir değer döndür. |
??= |
Null birleşim ataması | Değişken null olduğunda yalnızca atayın |
is null / is not null |
Null desen | Tercih edilen null test |
string? city = GetCity();
// ?. — access a member only when non-null
int? len = city?.Length;
// ?? — substitute a default when null
string display = city ?? "unknown";
// is null — preferred null test
if (city is null)
{
Console.WriteLine("No city provided.");
}
else
{
Console.WriteLine($"{display} ({len} chars)");
}
// Output: No city provided.
Her işlecin ayrıntılı örnekleri için bkz. Null işleçler.
Null değer atanabilir türler ve null başvuru türleri farklı amaçlara hizmet eder.
Null atanabilir değer türleri ve null atanabilir referans türleri birbirinin alternatifi değildir. Farklı sorunları çözer:
- "Değer yok" ifadesini temsil etmesi gereken bir değer türü için kullanın
T?. Örneğin, isteğe bağlı bir veritabanı sütunu veyaint?henüz zamanlanmamış bir olay için kullanınDateTime?. - Derleyicinin, çalışma zamanında bir
string?gerçekleşmeden önce sizi uyarabilmesi için ve diğer null atanabilir başvuru ek açıklamalarını kullanarak bir başvurununnullbelgeleyinNullReferenceException.
Bu özellikler ve null işleçler birlikte null-safe C# kodu yazmak için eksiksiz bir araç kümesi sağlar.