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ürleri ile null değerleri ile başa çıkmanız gerekir. C#'ta null değer türleri, değer türleri için tanımsız veya eksik değerleri temsil etmenin bir yolunu sunar. Bu kılavuz, C# null türlerinin temellerini, pratik kullanımlarını ve farklı senaryolarda nasıl çalıştıklarını kapsar. Makalenin ilerleyen kısımlarında IronPDF'i de inceleyeceğiz.

C#'ta Nullable Türler

Varsayılan olarak, C#'taki değer türleri (örneğin, int, bool, DateTime) null değerleri alamaz. Bu sınırlamayı aşmak için, C# nullable değer türlerini tanıtır ve değer türlerine null atayabilmenizi sağlar. Nullable türler, geçerli bir değerin yokluğunu temsil etmeniz gerektiğinde özellikle kullanışlıdır.

Null Tipleri Tanımlama

C#'ta bir null tür tanımlamak 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> kısayoludur. nullableInt değişkeni, ya bir int değeri ya da null tutabilir.

Null'u Kontrol Etme

Boş değer alabilir tür değişkeninin bir 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 sunmak için null birleştirme 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

nullableInt null ise, result varsayılan 0 değeri atanacaktır.

Nullable Değer Türleri ile Nullable Referans Türleri

C#'ta değer türleri (örneğin, int, bool ve double), referans türlerinden (örneğin, string, object) 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 olmamasını sağlar, bu da null referans hatası riskini azaltır.

Nullable Değer Türleri

Bir nullable değer türü, bir değer türünün null bir değer almasına izin verir. Bir boş değer alabilir türü tanımlamak için veri türüne 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 veya null tutabilir.

Nullable Referans Türleri

Boş referans türleri C# 8.0'da tanıtıldı. Proje seviyesinde veya kod dosyanızın başına #nullable enable yönergesi ekleyerek boş referans türlerini etkinleştirebilirsiniz. Boş referans türleri etkinleştirildiğinde, referans türleri ? kullanılarak açıkça boş olarak işaretlenmelidir, bu da potansiyel çalışma zamanı istisnalarından kaçınmanıza yardımcı olur.

# nullable enable
// Declare a nullable string
string? nullableString = null;
# nullable enable
// Declare a nullable string
string? nullableString = null;
$vbLabelText   $csharpLabel

Burada, nullableString boş olabilir. ? kullanmadan boş olmayan bir referans türü tanımlarsanız, derleyici, potansiyel boş atama tespit ederse uyarılar verecektir.

Nullable Referans Türlerini Etkinleştirme

Bir projede boş referans türlerini küresel olarak etkinleştirmek için, .csproj dosyanıza aşağıdaki satırı ekleyin:

<Nullable>enable</Nullable>
<Nullable>enable</Nullable>
XML

Aktif hale getirildikten sonra derleyici, referans türlerini varsayılan olarak null olmayan olarak değerlendirir. Bu özellik, çalışma zamanında değil derleme zamanında null referans sorunlarını yakalamak için özellikle uygundur.

Uygulamalı Örnekler

Null türleri anlamanızı pekiştirmek için bazı pratik örnekleri keşfedelim.

Örnek 1: Değer Türleri ile Null Tür

Bu örnekte, int ile bir nullable tür 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 boş değer alabilir int türü değişkenidir. nullableInt null ise, boş birleşim 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örelim:

# 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);
    }
}
Option Strict On



Module Program
    Sub Main()
        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 Module
$vbLabelText   $csharpLabel

Yukarıdaki kodda, nullableString null olabilir ve boş birleşim operatörü, eğer null ise, dizinin uzunluğunun varsayılan olarak 0 olmasını sağlar.

Örnek 3: İç içe Null Türler

C#, iç içe 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 nullable türler gereksiz görünse de, C#'ta sözdizimsel olarak geçerlidir. Ancak, pratikte iç içe nullable türler ekstra bir işlevsellik sağlamaz ve nadiren kullanılır.

Null Birleştirme Operatörü (??)

Null birleştirme operatörü (??), nullable türler ile sıklıkla kullanılır ve nullable tür null olduğunda varsayılan bir değer sağlar. Bu operatör, açık if-else kontrollerini önleyerek 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 atanacaktır. Aksi durumda, defaultValue, nullableValue değerini alır.

Derleme Zamanı Hataları ve Nullable Türler

Nullable referans türleri etkinleştirildiğinde, C# null atamalarla ilgili potansiyel sorunları tespit ettiğinde derleme sırasında uyarılar ve hatalar üretir. Bu derleme zamanı hataları, sorunları erken yakalamanıza yardımcı olarak kodunuzu daha sağlam hale getirir.

Aşağıdaki örneği inceleyin:

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'yi nonNullableString'ye atamak, nullableString null olabileceği için derleyici uyarısı üretir ve boş olmayan bir türe atama yapmak çalışma zamanı istisnalarına yol açabilir.

IronPDF ile Nullable Türleri Kullanma

C# Boş Değer Alabilir Türler (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - IronPDF: C# PDF Kütüphanesi

IronPDF, geliştiricilere doğrudan .NET uygulamalarından PDF dosyaları oluşturma, düzenleme ve yönetme konularında yardımcı olmak için tasarlanmış bir C# PDF kütüphanesidir. HTML'yi PDF'ye dönüştürebilir, raporlar üretebilir veya karmaşık belge yapıları ile uğraşabilirsiniz.

Null türler, özellikle eksik finansal verilerle bir muhasebeci için PDF oluştururken olduğu gibi dinamik rapor üretim senaryolarında özellikle kullanışlıdır. Null türleri kullanarak, opsiyonel 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# Boş Değer Alabilir Türler (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - Örnek kod çıktısı

Bu kodda, boş türler (int? ve string?) eksik veriyi güvenli bir şekilde işlemek için kullanılır. Null birleştirme operatörü (??), herhangi bir veri eksik olduğunda, PDF'de varsayılan bir değerin kullanılmasını sağlar.

Sonuç

C# Boş Değer Alabilir Türler (Geliştiriciler İçin Nasıl Çalışır): Şekil 3 - IronPDF lisanslama sayfası

C#'ta nullable türler, hem değer türlerinde hem de referans türlerinde null değerleri ele almak için güçlü bir araçtır. Nullable türler kullanarak, null referans hatalarından kaçınabilir ve kodunuzu daha sağlam hale getirebilirsiniz. Compile-time hata kontrolünden yararlanmak için yeni projelerde nullable referans türlerini etkinleştirmeyi ve nullable tiplerle çalışırken kodunuzu basitleştirmek için null birleştirme operatörünü (??) kullanmayı unutmayın.

IronPDF, özelliklerini bir taahhüt vermeden önce keşfetmenize olanak sağlamak için bir ücretsiz deneme sunar. Ön ödeme yapmadan, sürecinize nasıl uyduğunu değerlendirebilir ve deneyebilirsiniz. İlerlemenize hazır olduğunuzda, lisanslar $799 ile başlamaktadır.

Sıkça Sorulan Sorular

Dinamik PDF oluşturmada null değer türleri nasıl kullanılabilir?

IronPDF gibi kütüphaneler, null değer türlerini kullanarak isteğe bağlı alanların güvenli bir şekilde temsil edilmesini sağlayarak, dinamik PDF oluşturmada önemli olabilir. Bu, eksik verilerin uygun şekilde ele alınmasını sağlar ve gerekli durumlarda varsayılan değerler sağlar.

C#'de null değer türleri tanımlama söz dizimi nedir?

C#'de bir null değer türü tanımlamak için veri tipine bir soru işareti '?' ekleyebilirsiniz. Örneğin, bir null değerli tam sayı tanımlamak için int? nullableInt = null; yazabilirsiniz.

C#'de null değer türlerini kullanmak, oluşturulan raporların sağlamlığını etkileyebilir mi?

Evet, null değer türlerini kullanmak, isteğe bağlı alanların eksik değerleriyle hata oluşturmasını önleyerek oluşturulan raporların sağlamlığını artırabilir. IronPDF gibi kütüphaneler, bu durumları verimli bir şekilde yönetmek için null değer türlerinden yararlanabilir.

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

C# 8.0'de tanıtılan null 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 hatası riskini azaltır ve derleme sırasında potansiyel sorunların erken tespitine olanak tanır.

Null birleşim operatörünün null değer türlerini yönetmedeki rolü nedir?

Null birleşim operatörü ??, null değer türleri yönetilirken null olan bir tür için varsayılan bir değer sağlayarak kullanılır. Kodunuzu basitleştirir ve açıkça if-else kontrolleri yapmaktan kaçınmanıza yardımcı olur.

C#'de bir null değer türünün değeri olup olmadığını nasıl kontrol edersiniz?

C#'de bir null değer türünün değere sahip olup olmadığını anlamak için HasValue özelliğini kullanabilir veya değişkeni doğrudan null ile karşılaştırabilirsiniz.

C# uygulamalarında null değer türlerinin kullanıldığı tipik senaryolar nelerdir?

Null değer türleri, form girdileri, yapılandırma ayarları veya null değeri kabul eden veritabanları ile etkileşim gibi verilerin tamamlanmamış veya isteğe bağlı olabileceği durumlarda sıkça kullanılır. Özellikle IronPDF gibi kütüphanelerle dinamik rapor oluşturma konusunda faydalıdır.

Null referans türlerini etkinleştirmenin C# proje derlemesine etkisi nedir?

C# projesinde null referans türlerini etkinleştirmek, potansiyel null referans sorunları için derleme zamanı uyarıları ve hatalarına yol açar, böylece sorunları erken tespit eder ve daha sağlam kod geliştirmeyi teşvik eder.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Chief Technology Officer

Jacob Mellor, Iron Software'in Teknoloji Müdürü ve C# PDF teknolojisinin öncüsü olan vizyoner bir mühendis. Iron Software’in temel kod tabanının ilk geliştiricisi olarak, şirketin ürün mimarisini kuruluşundan bu yana şekillendirdi ve CEO Cameron Rimington ile birlikte NASA, Tesla ve ...

Daha Fazlasını Oku

Iron Destek Ekibi

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