
C# Nullable Türler (Geliştiriciler İçin Nasıl Çalışır)
C# ile çalışırken, özellikle referans türleriyle null değerlerini ele almanız gereken durumlar sıkça ortaya çıkar. C#'taki nullable türler, değer türleri için tanımsız veya yoklukta değerleri temsil etmenin bir yolunu sağlar. Bu rehber, C# nullable türlerin temellerini, pratik kullanım alanlarını ve farklı senaryolarda nasıl çalıştıklarını kapsar. Makalenin ilerleyen bölümlerinde IronPDF'i de inceleyeceğiz.
Nullable Types in C#
Varsayılan olarak, C#'taki değer türleri (örneğin, int, bool, DateTime) null değerle atanamaz. Bu sınırlamayı ele almak için, C# nullable değer türlerini tanıtır, bu da değer türlerine null atamanıza olanak tanır. Nullable türler, özellikle geçerli bir değerin yokluğunu temsil etmeniz gerektiğinde yararlıdır.
Nullable Türler Belirleme
C#'ta nullable bir tür belirtmek için aşağıdaki sözdizimini kullanırsınız:
// Declare a nullable integer
int? nullableInt = null;' Declare a nullable integer
Dim nullableInt? As Integer = NothingBurada, int?, Nullable<int> için kısayoldur. nullableInt değişkeni ya bir int değeri ya da null tutabilir.
Null Kontrolü
Nullable bir tür değişkeninin değeri olup olmadığını kontrol etmek için HasValue özelliğini kullanabilir veya değişkeni doğrudan null ile karşılaştırabilirsiniz, aşağıda gösterildiği gibi:
if (nullableInt.HasValue)
{
// If nullableInt has a value, print it
Console.WriteLine("Value: " + nullableInt.Value);
}
else
{
// If nullableInt does not have a value, print a message
Console.WriteLine("No value assigned.");
}If nullableInt.HasValue Then
' If nullableInt has a value, print it
Console.WriteLine("Value: " & nullableInt.Value)
Else
' If nullableInt does not have a value, print a message
Console.WriteLine("No value assigned.")
End IfAlternatif olarak, nullable tür null olduğunda varsayılan bir değer sağlamak için null birleşim operatörünü (??) kullanabilirsiniz:
// Assign 0 if nullableInt is null
int result = nullableInt ?? 0;
Console.WriteLine("Result: " + result);' Assign 0 if nullableInt is null
Dim result As Integer = If(nullableInt, 0)
Console.WriteLine("Result: " & result)Eğer nullableInt null ise, result varsayılan 0 değeri atanacaktır.
Nullable Değer Türleri ve Nullable Referans Türleri
C#'ta, değer türleri (int, bool ve double gibi), referans türlerinden (string, object gibi) farklıdır. Nullable değer türleri, değer türlerinin null'u temsil etmesine izin verirken, nullable referans türleri, referans türlerinin varsayılan olarak null içermez hale gelmesine izin verir, böylece null referans istisnaları riskini azaltır.
Nullable Değer Türleri
Nullable bir değer türü, bir değer türünün null bir değer almasına izin verir. Nullable bir değer türü bildirmek için veri tipine bir soru işareti ? ekleyin:
// Declare a nullable double
double? nullableDouble = null;' Declare a nullable double
Dim nullableDouble? As Double = NothingBu örnekte, nullableDouble bir double değeri ya da null tutabilir.
Nullable Referans Türleri
Nullable referans türleri, C# 8.0'da tanıtıldı. Nullable referans türlerini proje düzeyinde etkinleştirebilir veya kod dosyanızın başına #nullable enable yönergisi ekleyerek etkinleştirebilirsiniz. Nullable referans türlerini etkinleştirildiğinde, referans türleri açıkça ? kullanılarak nullable olarak işaretlenmelidir, bu sayede null referanslar nedeniyle oluşabilecek potansiyel çalışma zamanı hataları önlenir.
#nullable enable
// Declare a nullable string
string? nullableString = null;'INSTANT VB TODO TASK: There is no equivalent to #nullable in VB:
'#nullable enable
' Declare a nullable string
'INSTANT VB WARNING: Nullable reference types have no equivalent in VB:
'ORIGINAL LINE: string? nullableString = null;
Dim nullableString As String = NothingBurada, nullableString null olmasına izin verilir. Eğer ? olmadan bir nullable olmayan referans türü bildirirseniz, derleyici potansiyel null atamaları tespit ederse uyarılar üretecektir.
Nullable Referans Türlerini Etkinleştirme
Proje genelinde nullable referans türlerini etkinleştirmek için, .csproj dosyanıza aşağıdaki satırı ekleyin:
<Nullable>enable</Nullable>
Etkinleştirildiğinde, derleyici referans türlerini varsayılan olarak null içermez olarak kabul edecektir. Bu özellik, çalışma zamanında değil, derleme zamanında null referans sorunlarını yakalamak için özellikle kullanışlıdır.
Pratik Örnekler
Nullable türlerin anlaşılır olup olmadığını pekiştirmek için bazı pratik örnekler inceleyelim.
Örnek 1: Değer Türleri ile Nullable Tür
Bu örnekte, bir nullable türü int ile kullanacağız:
class Program
{
static void Main(string[] args)
{
int? nullableInt = null;
// Use null coalescing operator to assign a default value
int b = nullableInt ?? 10;
Console.WriteLine("b: " + b);
if (nullableInt.HasValue)
{
// nullableInt has a value
Console.WriteLine("nullableInt has value: " + nullableInt.Value);
}
else
{
// nullableInt is null
Console.WriteLine("nullableInt is null");
}
}
}Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim nullableInt? As Integer = Nothing
' Use null coalescing operator to assign a default value
Dim b As Integer = If(nullableInt, 10)
Console.WriteLine("b: " & b)
If nullableInt.HasValue Then
' nullableInt has a value
Console.WriteLine("nullableInt has value: " & nullableInt.Value)
Else
' nullableInt is null
Console.WriteLine("nullableInt is null")
End If
End Sub
End ClassBurada, nullableInt bir nullable tür int değişkenidir. Eğer nullableInt null ise, null birleştirme operatörü nedeniyle b 10 değerini alır. Aksi takdirde, b, nullableInt değerini alır.
Örnek 2: Nullable Referans Türleri
Şimdi, nullable referans türlerinin nasıl çalıştığını göreceğiz:
#nullable enable
class Program
{
static void Main()
{
string? nullableString = null;
string nonNullableString = "Hello";
// Use null coalescing operator to provide a default value for length
Console.WriteLine(nullableString?.Length ?? 0);
Console.WriteLine(nonNullableString.Length);
}
}'INSTANT VB TODO TASK: There is no equivalent to #nullable in VB:
'#nullable enable
Friend Class Program
Shared Sub Main()
'INSTANT VB WARNING: Nullable reference types have no equivalent in VB:
'ORIGINAL LINE: string? nullableString = null;
Dim nullableString As String = Nothing
Dim nonNullableString As String = "Hello"
' Use null coalescing operator to provide a default value for length
Console.WriteLine(If(nullableString?.Length, 0))
Console.WriteLine(nonNullableString.Length)
End Sub
End ClassYukarıdaki kodda, nullableString null olabilir ve null birleştirme operatörü eğer null ise, string uzunluğunun varsayılan olarak 0 olmasını sağlar.
Örnek 3: İç İçe Geçmiş Nullable Türler
C# iç içe geçmiş nullable türler tanımlamanıza olanak tanır. Örneğin:
// Redundant, but syntactically valid
int? nestedNullableInt = null;' Redundant, but syntactically valid
Dim nestedNullableInt? As Integer = Nothingİç içe geçmiş nullable türler gereksiz görünebilir, ancak C#'ta sözdizimsel olarak geçerlidir. Ancak, pratikte, iç içe geçmiş nullable türler ek bir işlevsellik sağlamaz ve nadiren kullanılır.
Null Birleşim Operatörü (??)
Null birleşim operatörü (??), nullable türler ile birlikte null olduğunda varsayılan bir değer sağlamak için sıklıkla kullanılır. Bu operatör, explicit if-else kontrollerinden kaçınarak kodu basitleştirir.
int? nullableValue = null;
// Assign -1 if nullableValue is null
int defaultValue = nullableValue ?? -1;Dim nullableValue? As Integer = Nothing
' Assign -1 if nullableValue is null
Dim defaultValue As Integer = If(nullableValue, -1)Bu örnekte, nullableValue null ise, defaultValue -1 atanır. Aksi takdirde, defaultValue, nullableValue değerini alır.
Derleme Zamanı Hataları ve Nullable Türler
Nullable referans türleri etkinleştirildiğinde, C# potansiyel sorunları tespit ettiğinde derleme sırasında uyarılar ve hatalar üretir. Bu derleme zamanı hataları, sorunları erken yakalamanıza yardım ederek kodunuzu daha sağlam hale getirir.
Aşağıdaki örneğe bakın:
string? nullableString = null;
// This will produce a compiler warning because nullableString may be null
string nonNullableString = nullableString;'INSTANT VB WARNING: Nullable reference types have no equivalent in VB:
'ORIGINAL LINE: string? nullableString = null;
Dim nullableString As String = Nothing
' This will produce a compiler warning because nullableString may be null
Dim nonNullableString As String = nullableStringBu durumda, nullableString değerini nonNullableString'ye atamak, nullableString null olabileceği ve nullable olmayan bir türe atamanın çalışma zamanı hatalarına yol açabileceği için bir derleyici uyarısı üretir.
IronPDF ile Nullable Türleri Kullanma

IronPDF, geliştiricilerin .NET uygulamalarından doğrudan PDF dosyaları oluşturmasına, düzenlemesine ve manipüle etmesine yardımcı olmak için tasarlanmış bir C# PDF kütüphanesidir. HTML'yi PDF'ye dönüştürebilir, raporlar oluşturabilir veya karmaşık belge yapılarıyla uğraşabilirsiniz.
Nullable türler, özellikle muhasebeci için eksik finansal verilerle bir PDF oluşturduğunuz dinamik rapor oluşturma senaryolarında kullanışlıdır. Nullable türler kullanarak, isteğe bağlı alanları yönetebilir, istisnalardan kaçınabilir ve varsayılan değerler sağlayabilirsiniz.
using IronPdf;
class Program
{
static void Main(string[] args)
{
int? optionalIncome = null; // Nullable type for optional income
string? clientName = "Iron Dev"; // Nullable reference type for client name
var renderer = new ChromePdfRenderer();
string htmlContent = $@"
<h1>Financial Report</h1>
<p>Client Name: {clientName ?? "Unknown"}</p>
<p>Income: {optionalIncome?.ToString() ?? "Data not available"}</p>";
// Render the HTML to a PDF
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Save the PDF to disk
pdf.SaveAs("FinancialReport.pdf");
Console.WriteLine("PDF Generated Successfully.");
}
}Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim optionalIncome? As Integer = Nothing ' Nullable type for optional income
'INSTANT VB WARNING: Nullable reference types have no equivalent in VB:
'ORIGINAL LINE: string? clientName = "Iron Dev";
Dim clientName As String = "Iron Dev" ' Nullable reference type for client name
Dim renderer = New ChromePdfRenderer()
Dim htmlContent As String = $"
<h1>Financial Report</h1>
<p>Client Name: {If(clientName, "Unknown")}</p>ignoreignore<p>Income: {If(optionalIncome?.ToString(), "Data not available")}</p>"
' Render the HTML to a PDF
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
' Save the PDF to disk
pdf.SaveAs("FinancialReport.pdf")
Console.WriteLine("PDF Generated Successfully.")
End Sub
End Class
Bu kodda, nullable türler (int? ve string?) kayıp verileri güvenli bir şekilde yönetmek için kullanılır. Null birleşim operatörü (??), herhangi bir veri eksikse, PDF'de varsayılan bir değer kullanılmasını sağlar.
Sonuç

C#'ta nullable türler, hem değer türlerindeki hem de referans türlerindeki null değerlerini yönetmek için güçlü bir araçtır. Nullable türler kullanarak, null referans istisnalarından kaçınabilir ve kodunuzun dayanıklılığını artırabilirsiniz. Yeni projelerde derleme zamanı hata denetiminden faydalanmak için nullable referans türlerini etkinleştirmeyi ve nullable türlerle çalışırken kodunuzu basitleştirmek için null birleşim operatörünü (??) kullanmayı unutmayın.
IronPDF, taahhütte bulunmadan önce özelliklerini keşfetmek için ücretsiz bir deneme sunar. Önceden bir maliyet olmaksızın, nasıl çalıştığını görebilir ve geliştirme sürecinize nasıl uyduğunu deneyebilirsiniz. Devam etmeye hazır olduğunuzda, lisanslar $999 ile başlar.

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.
İlgili Makaleler


