Altbilgi içeriğine atla
.NET YARDıM

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
int? nullableInt = null;
' Declare a nullable integer
Dim nullableInt? As Integer = Nothing
$vbLabelText   $csharpLabel

Burada, 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)
{
    // 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 If
$vbLabelText   $csharpLabel

Alternatif 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
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)
$vbLabelText   $csharpLabel

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
double? nullableDouble = null;
' Declare a nullable double
Dim nullableDouble? As Double = Nothing
$vbLabelText   $csharpLabel

Bu ö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;
#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 = Nothing
$vbLabelText   $csharpLabel

Burada, 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>
<Nullable>enable</Nullable>
XML

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");
        }
    }
}
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 Class
$vbLabelText   $csharpLabel

Burada, 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);
    }
}
#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 Class
$vbLabelText   $csharpLabel

Yukarı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
int? nestedNullableInt = null;
' Redundant, but syntactically valid
Dim nestedNullableInt? As Integer = Nothing
$vbLabelText   $csharpLabel

İç 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;
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)
$vbLabelText   $csharpLabel

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;
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 = nullableString
$vbLabelText   $csharpLabel

Bu 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

C# Nullable Types (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - IronPDF: C# PDF Kütüphanesi

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.");
    }
}
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
$vbLabelText   $csharpLabel

C# Nullable Types (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - Örnek kod çıktısı

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# Nullable Types (Geliştiriciler İçin Nasıl Çalışır): Şekil 3 - IronPDF lisanslama sayfası

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.

Sıkça Sorulan Sorular

Nullable türler dinamik PDF oluşturma sürecinde nasıl kullanılabilir?

Nullable türler, IronPDF gibi kütüphaneler kullanarak isteğe bağlı alanların güvenli bir şekilde temsil edilmesine izin vererek dinamik PDF oluşturma sürecinde kritik olabilir. Bu, eksik verilerin uygun şekilde ele alınmasını sağlar ve gerektiğinde varsayılan değerlerin sağlanmasıyla desteklenir.

C#'ta nullable türlerin deklarasyonu için söz dizimi nedir?

C#'ta bir nullable türü, veri türüne bir soru işareti '?' ekleyerek bildirebilirsiniz. Örneğin, nullable bir tamsayı bildirmek için int? nullableInt = null; yazarsınız.

C#'taki nullable türler oluşturulan raporların sağlamlığını etkileyebilir mi?

Evet, nullable türlerin kullanımı, isteğe bağlı alanlar değerleri yokken hata oluşturmadığından oluşturulan raporların sağlamlığını artırabilir. IronPDF gibi kütüphaneler bu koşulları verimli bir şekilde yönetmek için nullable türlerinden yararlanabilir.

Nullable referans türleri çalışma zamanı hatalarını önlemeye nasıl yardımcı olur?

C# 8.0'da tanıtılan nullable referans türleri, referans türlerinin varsayılan olarak null olamamasına izin vererek çalışma zamanı hatalarını önlemeye yardımcı olur. Bu, null referans istisnaları riskini azaltır ve derleme sırasında olası sorunların erken tespit edilmesine olanak tanır.

Null birleştirme operatörünün nullable türleri yönetmedeki rolü nedir?

Null birleştirme operatörü ??, nullable bir türün null olduğu durumlarda varsayılan bir değer sağlayarak nullable türleri yönetir. Bu, kodu basitleştirir ve açık if-else kontrollerinden kaçınmayı sağlar.

C#'ta bir nullable türün değer sahip olup olmadığını nasıl kontrol edersiniz?

C#'ta bir nullable türün bir değere sahip olup olmadığını, HasValue özelliğini kullanarak veya değişkeni doğrudan null'a karşı karşılaştırarak belirleyebilirsiniz.

C# uygulamalarında nullable türleri kullanmanın tipik senaryoları nelerdir?

Nullable türler genellikle verilerin eksik veya isteğe bağlı olabileceği, form girdileri, yapılandırma ayarları veya null değerlere izin veren veritabanları ile iletişim kurulması gibi durumlarda kullanılır. IronPDF gibi kütüphanelerle dinamik rapor oluşturma aşamasında özellikle kullanışlıdır.

Nullable referans türlerinin etkinleştirilmesi C# proje derlemesini nasıl etkiler?

Bir C# projesinde nullable referans türlerinin etkinleştirilmesi, potansiyel null referans sorunlarına yönelik derleme zamanı uyarılarına ve hatalara yol açar, böylece sorunlar erken tespit edilerek daha sağlam kod geliştirilmesine teşvik eder.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

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 ...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara