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

C# AS (Geliştiriciler İçin Nasıl Çalışır)

C#'ta programlama genellikle farklı tiplerdeki verilerle çalışmayı gerektirir. Bazen, bir object belirli bir türe ait mi ya da o türe dönüştürülebilir mi bakmamız gerekir. as operatör anahtar kelimesi burada kullanışlı hale gelir. Yakın akrabası is operatörü, tür testi ve dönüştürmelerde yardımcı olur. Bu eğitimde, bu operatörün ayrıntılarını ve kullanım durumlarını keşfedeceğiz.

as operatörünü Anlamak

as operatörünün temelleri

C# içindeki as operatör anahtar kelimesi, belirli dönüşümleri uyumlu referans türleri veya nullable türleri arasında gerçekleştirmek için kullanılan bir ikili operatördür. Aşağıdaki kod basit bir gösterim sunar:

// Declare an object that holds a string
object myObj = "Hello, World!";

// Use the 'as' operator to attempt to convert 'myObj' to a string
string myStr = myObj as string;

// myStr will hold the string value "Hello, World!" if the conversion is successful;
// otherwise, it will be null.
// Declare an object that holds a string
object myObj = "Hello, World!";

// Use the 'as' operator to attempt to convert 'myObj' to a string
string myStr = myObj as string;

// myStr will hold the string value "Hello, World!" if the conversion is successful;
// otherwise, it will be null.
' Declare an object that holds a string
Dim myObj As Object = "Hello, World!"

' Use the 'as' operator to attempt to convert 'myObj' to a string
Dim myStr As String = TryCast(myObj, String)

' myStr will hold the string value "Hello, World!" if the conversion is successful;
' otherwise, it will be null.
$vbLabelText   $csharpLabel

Yukarıdaki kodda, myObj bir object türünde (C#'deki tüm türler için taban tür) nesnedir. Derleme zamanı sırasında onun altta yatan türü hakkında emin değiliz. as operatörü, myObj'i string olarak işlemeyi denemek için kullanılır. Başarılı olursa, myStr string değeri tutacaktır. Aksi halde, null değeri tutacaktır.

Açık Dönüştürmeden Nasıl Farklıdır?

Hem as operatörü hem de açık dönüşüm benzer amaçlara hizmet ederken, önemli bir fark vardır. Eğer açık bir dönüştürme başarısız olursa, bir istisna fırlatır. Öte yandan, as operatörünün bir türden diğerine dönüşümü denemesi başarısız olursa, operatör bir null değeri döndürür ve bir istisna meydana getirmez. Bunu aşağıdaki kod örneği ile anlayalım:

object someValue = 12345;
string castResult;

// Using explicit cast
try {
    castResult = (string)someValue; // This will throw an exception since the cast fails.
}
catch(Exception ex) {
    castResult = null; // The result is set to null if an exception is caught.
}

// Using the 'as' operator
string asResult = someValue as string; // No exception, but 'asResult' will be null since the cast fails.
object someValue = 12345;
string castResult;

// Using explicit cast
try {
    castResult = (string)someValue; // This will throw an exception since the cast fails.
}
catch(Exception ex) {
    castResult = null; // The result is set to null if an exception is caught.
}

// Using the 'as' operator
string asResult = someValue as string; // No exception, but 'asResult' will be null since the cast fails.
Dim someValue As Object = 12345
Dim castResult As String

' Using explicit cast
Try
	castResult = DirectCast(someValue, String) ' This will throw an exception since the cast fails.
Catch ex As Exception
	castResult = Nothing ' The result is set to null if an exception is caught.
End Try

' Using the 'as' operator
Dim asResult As String = TryCast(someValue, String) ' No exception, but 'asResult' will be null since the cast fails.
$vbLabelText   $csharpLabel

Görüldüğü gibi, as operatörünü kullanmak genellikle daha güvenli olabilir çünkü potansiyel çalışma zamanı hatalarından kaçınırsınız.

is operatörü ile Bağlantı

Genellikle, as operatörü, bir dönüşüm denemeden önce tür testi için is operatörü ile birlikte kullanılır. is operatörü, sağlanan nesnenin verilen türe ait olup olmadığını kontrol eder ve eğer öyleyse true döndürür, aksi takdirde false döndürür.

Aşağıdaki kod örneği bunu gösterir:

object testObject = "This is a string";

// Check if testObject is of type string
if (testObject is string) {
    // If true, convert testObject to string using 'as'
    string result = testObject as string;
    Console.WriteLine(result); // Outputs: This is a string
} else {
    Console.WriteLine("Not a string");
}
object testObject = "This is a string";

// Check if testObject is of type string
if (testObject is string) {
    // If true, convert testObject to string using 'as'
    string result = testObject as string;
    Console.WriteLine(result); // Outputs: This is a string
} else {
    Console.WriteLine("Not a string");
}
Dim testObject As Object = "This is a string"

' Check if testObject is of type string
If TypeOf testObject Is String Then
	' If true, convert testObject to string using 'as'
	Dim result As String = TryCast(testObject, String)
	Console.WriteLine(result) ' Outputs: This is a string
Else
	Console.WriteLine("Not a string")
End If
$vbLabelText   $csharpLabel

C#'ın sonraki sürümlerine desen eşlemenin eklenmesiyle, is operatörü, tür testi geçildiğinde belirli aksiyonlar da gerçekleştirebilir. Bu, genellikle as operatörünü kullanma ihtiyaçını azaltır.

Daha Derine İniyoruz: Özel Durumlar ve Göz Önünde Bulundurulması Gerekenler

Nullable Değer Türü Dönüştürmeleri

Önemli özel durumlardan biri, as operatörünün çok değerli olduğu nullable değer türleri ile ilgilidir. Değer türleri (örneğin, int, double, vb.) bir null değeri atanamaz. Ancak, bunları nullable yaparak onlara null atayabilirsiniz. as operatörü, nullable değer türüne dönüşüm denemeleri için kullanılabilir:

// Declare a nullable integer
int? nullableInt = 10;

// Box the nullable int
object objInt = nullableInt;

// Attempt to unbox using 'as' to a nullable int type
int? resultInt = objInt as int?;
// Declare a nullable integer
int? nullableInt = 10;

// Box the nullable int
object objInt = nullableInt;

// Attempt to unbox using 'as' to a nullable int type
int? resultInt = objInt as int?;
' Declare a nullable integer
Dim nullableInt? As Integer = 10

' Box the nullable int
Dim objInt As Object = nullableInt

' Attempt to unbox using 'as' to a nullable int type
Dim resultInt? As Integer = CType(objInt, Integer?)
$vbLabelText   $csharpLabel

Referans Dönüştürmeleri ve Kullanıcı Tanımlı Dönüştürmeler

as operatörü, hem referans conversionlerini (ilişkili referans türleri arasında) hem de kullanıcı tanımlı dönüşümleri destekler. Kullanıcı tanımlı dönüştürmeler, sınıflarınızdaki özel dönüştürme yöntemleri kullanılarak tanımlanan dönüşümlerdir.

Bir kullanıcı tanımlı dönüştürmenin kodunu göz önünde bulundurun:

class Sample {
    // Define an implicit conversion from Sample to string
    public static implicit operator string(Sample s) {
        return "Converted to String";
    }
}

Sample sampleObject = new Sample();

// Use 'as' to convert 'sampleObject' to string
string conversionResult = sampleObject as string;

// conversionResult will hold "Converted to String"
class Sample {
    // Define an implicit conversion from Sample to string
    public static implicit operator string(Sample s) {
        return "Converted to String";
    }
}

Sample sampleObject = new Sample();

// Use 'as' to convert 'sampleObject' to string
string conversionResult = sampleObject as string;

// conversionResult will hold "Converted to String"
Friend Class Sample
	' Define an implicit conversion from Sample to string
	Public Shared Widening Operator CType(ByVal s As Sample) As String
		Return "Converted to String"
	End Operator
End Class

Private sampleObject As New Sample()

' Use 'as' to convert 'sampleObject' to string
Private conversionResult As String = TryCast(sampleObject, String)

' conversionResult will hold "Converted to String"
$vbLabelText   $csharpLabel

Burada, kullanıcı tanımlı dönüşüm metodu, bir Sample türü nesnenin string olarak işlenmesini sağlar.

as Kullanılmadığında

as operatörünün, (nullable değer türleri hariç) değer türleriyle veya bir explicit metot içeren kullanıcı tanımlı dönüşümlerle kullanılamayacağını unutmayın.

as Operatörü ile İleri Senaryolar

as ile Kutulama ve Kutu Açma

Kutulama, bir değer türü örneğinin bir nesne referansına dönüştürülmesi sürecidir. Bu mümkündür çünkü her değer türü, örtük olarak bir object'den türetilir. Bir değer türünü kutuladığınızda, onu bir object içine sararsınız.

Aşağıdaki kutulama dönüşümleri kodunu göz önünde bulundurun:

int intValue = 42;

// Box the value type to an object
object boxedValue = intValue;
int intValue = 42;

// Box the value type to an object
object boxedValue = intValue;
Dim intValue As Integer = 42

' Box the value type to an object
Dim boxedValue As Object = intValue
$vbLabelText   $csharpLabel

Burada, intValue bir object içine kutulanmıştır.

Kutudan çıkarma, kutulamanın ters işlemidir, yani bir object'den değer türünü çıkarmaktır. as operatörü, değer türünü beklediğinizden emin olmadığınızda değerleri güvenle kutudan çıkarmak için kullanılabilir. Eğer kutu açma başarısız ise, ifade sonucu null olacaktır.

Aşağıdaki kutu açma dönüşümleri örneğini göz önünde bulundurun:

object obj = 42;

// Attempt to unbox using 'as' to a nullable int type
int? result = obj as int?;
object obj = 42;

// Attempt to unbox using 'as' to a nullable int type
int? result = obj as int?;
Dim obj As Object = 42

' Attempt to unbox using 'as' to a nullable int type
Dim result? As Integer = CType(obj, Integer?)
$vbLabelText   $csharpLabel

Dizilerle Çalışma

C#'da diziler referans türleridir. Bazen, bir object'nin belirli bir türde dizi olup olmadığını belirlemeniz ve sonra onunla çalışmanız gerekebilir. as operatörü burada da yardımcı olabilir.

Aşağıdaki kodu göz önünde bulundurun:

object[] arrayObject = new string[] { "one", "two", "three" };

// Attempt to cast to a string array using 'as'
string[] stringArray = arrayObject as string[];

// stringArray will hold the array of strings if successful
object[] arrayObject = new string[] { "one", "two", "three" };

// Attempt to cast to a string array using 'as'
string[] stringArray = arrayObject as string[];

// stringArray will hold the array of strings if successful
Dim arrayObject() As Object = New String() { "one", "two", "three" }

' Attempt to cast to a string array using 'as'
Dim stringArray() As String = TryCast(arrayObject, String())

' stringArray will hold the array of strings if successful
$vbLabelText   $csharpLabel

Yukarıdaki kodda, arrayObject aslında stringler içeren bir nesne dizisidir. as operatörünü kullanarak, onu güvenle string dizisi olarak işlemeye çalışabilirsiniz.

as ile LINQ'i Birleştirme

Dil Entegre Sorgulama (LINQ - Microsoft Documentation) C#'da SQL benzeri bir şekilde koleksiyonlar sorgulamanıza olanak tanıyan güçlü bir özelliktir. Bazen, bir koleksiyonda karışık türdeki nesneleri alabilir ve belirli türleri ayırmak isteyebilirsiniz. İşte burada as operatörü çok kullanışlı olabilir.

Örneğin, hem dizileri hem de tam sayıları içeren bir nesne listesi düşünün. Sadece stringleri almak isterseniz, LINQ ile birlikte as operatörünü kullanabilirsiniz:

var mixedList = new List<object> { "Hello", 42, "World", 100 };

// Use LINQ to select only strings from mixedList
var stringValues = mixedList
    .Select(item => item as string)
    .Where(item => item != null)
    .ToList();

// stringValues will contain "Hello" and "World"
var mixedList = new List<object> { "Hello", 42, "World", 100 };

// Use LINQ to select only strings from mixedList
var stringValues = mixedList
    .Select(item => item as string)
    .Where(item => item != null)
    .ToList();

// stringValues will contain "Hello" and "World"
Dim mixedList = New List(Of Object) From {"Hello", 42, "World", 100}

' Use LINQ to select only strings from mixedList
Dim stringValues = mixedList.Select(Function(item) TryCast(item, String)).Where(Function(item) item IsNot Nothing).ToList()

' stringValues will contain "Hello" and "World"
$vbLabelText   $csharpLabel

Iron Suite ile Entegrasyon

Iron Suite Çözümleri, C# Geliştiricileri için, C# geliştiricilerine PDF işleme, Excel yönetimi, Optik Karakter Tanıma (OCR) ve barkod oluşturma ve okuma gibi işlevleri sorunsuz bir şekilde entegre etme yetkisi veren yüksek kaliteli bir araçlar paketidir. Daha önceki as ve is operatörleri hakkındaki tartışmamızdaki gibi bu araçlar, bir geliştiricinin sağlam uygulamalar oluşturma verimliliğini artırmada önemli rol oynar.

IronPDF

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

IronPDF, geliştiricilerin C# uygulamalarında PDF dosyaları oluşturmasına, işlemesine ve okumasına olanak tanır. Konumuzla olan ilgisini düşünürsek, diyelim ki bir referans türünüz vardı ve bu veriyi bir rapor veya belgeye dönüştürmek istediniz. IronPDF uygulamanızın çıktısını alıp, tür dönüşümüne benzer bir şekilde iyi biçimlendirilmiş bir PDF belgesine dönüştürebilir.

IronXL

C# AS (Geliştiriciler İçin Nasıl Çalışır) Şekil 2 - IronXL for .NET: C# Excel Kütüphanesi

Birçok yazılım uygulamasında Excel dosyalarını işlemek sıkça ihtiyaç duyulan bir gerekliliktir. IronXL for Excel Operations, geliştiricilere Office Interop'a bağımlı olmadan Excel hesap tablolarını okuma, düzenleme ve oluşturma yeteneği sağlar. Tür dönüşümleri üzerindeki tartışmamız bağlamında, IronXL'i, C#'teki veri yapıları veya veritabanı girdilerini Excel formatlarına sorunsuz bir şekilde dönüştürmenize olanak tanıyan bir araç olarak düşünebilirsiniz.

IronOCR

C# AS (Geliştiriciler İçin Nasıl Çalışır) Şekil 3 - IronOCR for .NET: C# OCR Kütüphanesi

Optical Character Recognition with IronOCR, geliştiricilerin metni görüntülerden okumasına ve yorumlamasına izin veren bir optik karakter tanıma aracıdır. Bunu dersimize bağlarsak, bir object (bu durumda bir görüntü) gelişmiş tanıma yetenekleri kullanarak daha belirgin bir türe (string veya metinsel veri) dönüştürmek gibidir.

IronBarcode

C# AS (Geliştiriciler İçin Nasıl Çalışır) Şekil 4 - IronBarcode for .NET: C# Barkod Kütüphanesi

Birçok ticari uygulamada barkodları işlemek vazgeçilmezdir. IronBarcode Tool for Barcode Processing, geliştiricilerin C# uygulamalarında barkodlar oluşturmasına, okumasına ve decoder etmesine yardımcı olur. Tür dönüştürmeleri üzerindeki tartışmamıza ilişkin olarak, IronBarcode, görsel barkod verilerini (object formunu) yaygın kullanılabilir veri türlerine, örneğin stringlere veya ürün detaylarına, dönüştüren bir araç olarak görülebilir.

Sonuç

C# AS (Geliştiriciler İçin Nasıl Çalışır) Şekil 5 - Iron Suite for .NET

Her Iron Suite Sunumlarındaki ürün, tür dönüşümleri ve tür kontrolü üzerine tartışmamıza özellikle bağlandığında, C#'ın sunduğu esneklik ve gücün bir kanıtıdır. as ve is operatörleri gibi bu araçlar, geliştiricilere veri dönüştürme ve işleme yeteneği sağlar.

Bu araçlardan herhangi birini projelerinize entegre etmeyi düşünüyorsanız, her ürün lisansının $799 ile başladığını ve her ürünün bir Iron Suite Araçlarının ücretsiz deneme sürümünü sunduğunu belirtmek gerekir. Kapsamlı bir çözüm arayanlar için, Iron Suite cazip bir teklif sunar: sadece iki ürün fiyatına Iron Suite lisansı edinebilirsiniz.

Sıkça Sorulan Sorular

C# geliştirmede 'as' operatörünün rolü nedir?

C#'da 'as' operatörü, uyumlu referans türleri veya null yapılabilir türler arasında güvenli tür dönüşümleri gerçekleştirmek için kullanılır ve dönüşüm başarısız olursa null döner, böylece istisnalardan kaçınılır.

C#'da tür dönüşümlerini nasıl güvenli bir şekilde gerçekleştirebilirsiniz?

'as' operatörünü güvenli tür dönüşümleri için kullanabilirsiniz, çünkü dönüşüm başarısız olduğunda bir istisna atmaktansa null döner, bu da onu açık tür dönüşümünden daha güvenli hale getirir.

Belirli senaryolarda neden 'as' operatörü açık tür dönüşümüne tercih edilir?

'As' operatörü, başarısız dönüşümler nedeniyle oluşan istisnalardan kaçınmak istediğinizde tercih edilir, çünkü açık tür dönüşümünün aksine bir istisna atmadansa null döner.

C#'da null yapılabilir türlerle 'as' operatörü nasıl çalışır?

'As' operatörü, bir nesnenin belirtilen null yapılabilir türe dönüştürülememesi durumunda null dönen güvenli bir dönüşüm sağlayarak null yapılabilir türlerle kullanılabilir.

Belge dönüşümü için IronPDF C#'de nasıl kullanılabilir?

IronPDF, C# geliştiricilerinin HTML'yi PDF'ye dönüştürmesine, PDF içeriğini manipüle etmesine ve programlamayla PDF dosyaları oluşturmasına olanak tanır, uygulamalardaki belge işleme yeteneklerini geliştirir.

C# geliştiricileri için Iron Suite kullanmanın avantajları nelerdir?

Iron Suite, geliştiricilere çeşitli formatlar arasında veri dönüşümü ve manipülasyonu yapma yeteneği sağlayan IronPDF, IronXL, IronOCR ve IronBarcode gibi araçlar sunar.

C# kullanarak bir koleksiyondan belirli türleri nasıl filtreleyebilirsiniz?

'As' operatörünü, belirli türleri bir koleksiyondan filtrelemek için LINQ sorguları ile kullanabilirsiniz, böylece karışık nesne listelerinden yalnızca istenen tür seçilir.

C#'da 'is' ve 'as' operatörlerinin bir arada kullanıldığı yaygın bir kullanım durumu nedir?

'Is' ve 'as' operatörlerini birleştirmek, bir nesnenin türünü önce 'is' ile kontrol etmenize ve ardından 'as' kullanarak güvenli bir şekilde dönüştürmenize olanak tanır, tür güvenliğini sağlar ve istisnalardan kaçınır.

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