İlki bir istisna atar. Nesne üzerinde gerçek tip dönüşümü gerçekleştirmenin tek yolu da budur. (Sadece döküm değişken türünü değiştirir, çünkü tip dönüşüm Nesnenin bir * farklı tür verir, oysa bu tür dönüştürme döküm farklıdır.) Örnek
ikinci bir (herhangi bir isim, her ne kadar mümkün "VB.NET'te çağrıldığı gibi" cast "denir), InvalidCastException
'u atmak yerine yerine olarak değerlendirir. (Bu davranış nedeniyle, yalnızca referans türleri için çalışır).
Birbiriyle karşılaştırıldığında önemli bir performans sorunu yoktur. Eğer sonuç geçerli olmayabilir beklemek yalnızca
Sen as
kullanın. Aksi halde, ilkini kullanın. Sorunuzun parçaları için arada
, MSDN might be helpful:
as
operatör dökme işlemi gibidir. Ancak, dönüşüm mümkün değilse, istisna oluşturmak yerine null
döndürür. Aşağıdaki ifadeyi göz önünde bulundurun: Bu ifade yalnızca bir kez değerlendirilmek dışında aşağıdaki ifadeye eşdeğerdir.
expression is type ? (type)expression : (type)null
Not as
operatörü sadece referans dönüşüm ve boks dönüşüm gerçekleştirir. as
operatörü, kullanıcı tanımlı dönüşümler gibi diğer dönüşümleri gerçekleştiremez, bunun yerine cast ifadeleri kullanılarak gerçekleştirilmesi gerekir.
Döküm içermeyen, ancak aynı sözdizimini döküm olarak kullanan tip dönüştürme işleçlerinden bahsetmediniz. –
@Merlyn: Tamam ekleyeceğim, teşekkürler. :) @pst: Temizlik için teşekkürler! – Mehrdad
'Foo = SomeType olarak bar'; 'if (bar SomeType) {foo = (SomeType) bar; } ', çünkü tür yalnızca bir kez kontrol edilir. Ve bu, "foo = (SomeType)" çubuğunu denemek yerine * çok daha hızlıdır; } catch (InvalidCastException) {} eğer dönüştürme başarısız olursa, istisnalar oldukça pahalıdır. – Sven