Bunların hepsi eşit mi? Hangi şartlar altında birbirlerini seçmeliyim?
var.ToString ()
CStr (et var)
CType (var, Dize)
DirectCast (var, String)
DÜZENLEME: NotMyself'tan öneri …
- TryCast (var, String)
Bunların hepsi eşit mi? Hangi şartlar altında birbirlerini seçmeliyim?
var.ToString ()
CStr (et var)
CType (var, Dize)
DirectCast (var, String)
DÜZENLEME: NotMyself'tan öneri …
Yanıtlar:
Bunların hepsi biraz farklıdır ve genellikle kabul edilebilir bir kullanıma sahiptir.
var.
ToString
()
ne tür olduğuna bakılmaksızın size bir nesnenin dize olarak temsilini verecektir. var
Zaten bir dize değilse bunu kullanın .CStr
(var)
VB string döküm operatörüdür. Ben bir VB adamı değilim, bu yüzden bundan kaçınmayı öneririm, ama gerçekten hiçbir şeye zarar vermeyecek. Bence temelde aynı CType
.CType
(var, String)
verilen türü, sağlanan dönüştürme işleçlerini kullanarak bir dizeye dönüştürür.DirectCast
(var, String)
bir nesneyi bir dizeye yükseltmek için kullanılır. Bir nesne değişkeninin aslında bir dize olduğunu biliyorsanız, bunu kullanın. Bu, (string)var
C # ile aynıdır .TryCast
(@ NotMyself tarafından belirtildiği gibi) gibidir DirectCast
, ancak Nothing
değişken bir istisna atmak yerine bir dizeye dönüştürülemezse geri döner . Bu, var as string
C # ile aynıdır . TryCast
MSDN'deki sayfa çok iyi bir karşılaştırma vardır.TryCast
sadece olabilir bir tür olması gerekir, çünkü değer türleri için çalışan Nothing
bir değer olarak
CStr(var)
var DBNull.Value ise boğulur ve istisna oluşturur, ancak alternatif Convert.ToString(var)
boş bir dize döndürür.
Dim myList AS ArrayList=new ArrayList
Yazdığınızda (From e In myList select CType(e.Name,String)).ToArray()
işe yaramıyor. Yazmaya geldim ... select CType(e.Name.ToString,String)).ToArray()
ve gülüşümü aldım.
Cstr()
daha iyi performans için satır içi olarak derlenmiştir.
CType
bir dönüşüm operatörü tanımlanmışsa türler arasında yayın yapılmasına izin verir
ToString()
Taban tipi ve dize arasında dönüştürme mümkün değilse bir istisna atar.
TryParse()
Dize'den tabana typeif
mümkün aksi takdirde false döndürür
DirectCast
türler miras yoluyla ilişkilendirilirse veya ortak bir arabirimi paylaşırsa kullanılır, döküm mümkün değilse bir istisna atar trycast
, bu örnekte hiçbir şey döndürmez
MSDN , belirli türler için Cxxx dökümlerinin satır içi koda dönüştürüldüğünden VB .NET'teki performansı artırabileceğini belirtiyor. Nedense, o da anlaşılacağı DirectCast CType hep kullanır oysa ben döküm aklı derleme zamanında kontrol edilir ve optimizasyonlar uygulanabilir demek olduğunu düşünüyoruz; (dokümantasyon miras ilişkisi varken bu kadar devletler bazı durumlarda CType aksine VB çalışma zamanı.)
VB .NET kod yazarken, kullandığım ne yaptığım bağlıdır. Eğer prototip kodunu atacaksam yazacağım şeyi kullanacağım. Eğer kod ciddiysem, bir Cxxx döküm kullanmaya çalışıyorum. Biri yoksa, kalıtım ilişkisi olduğuna dair makul bir inancım varsa DirectCast kullanıyorum. Oyuncunun başarılı olması gerektiği konusunda hiçbir fikrim olmadığı bir durumsa (örneğin, kullanıcı girişi -> tamsayılar), o zaman TryCast'i kullanıcıda bir istisna atmaktan daha kolay bir şey yapmak için kullanırım.
Sallayamadığım bir şey, CStr yerine ToString kullanma eğilimindeyim, ancak sözde Cstr daha hızlı.
Aşağıdaki sözdizimini tercih ederim:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
Hah genellikle C # kod yazabilirsiniz söyleyebilirim. 8)
TryCast'ı tercih etmemin nedeni, döküm istisnalarının ek yükü ile uğraşmak zorunda kalmamanızdır. Oyuncunuz başarılı olur veya değişkeniniz null olarak başlatılır ve buna göre ilgilenirsiniz.
.ToString()
. Tamsayı gibi bir değer türü Hiçbir Şey olamaz. Bu durumda, CStr (sayı) veya sayı.ToString () güvenlidir. Genel durumda (sadece değer türleri değil), CStr (her ne olursa olsun) güvenlidir, çünkü Nothing (İşe Almaz) 'ı işleyebilir - sonuç String değişkeninde Nothing olur. TryCast çok faydalı - burada değil.
Kullanıcı Konrad Rudolph , Yığın Taşması sorusu "VB.NET'in Gizli Özellikleri" bölümündeki DirectCast () öğesini savunuyor .
String
etmekle ilgili olduğundan, OP'nin DirectCast'in uygun olduğu bir durumu tartışması pek olası değildir.
String
ve ToString
şikayetim geçerli olmaz. Konuyu genel DÖNÜŞÜM'den daraltıncaya kadar DirectCast'i savunmamalısınız.
Sertifika sınavına göre, basit dönüşümler için mümkün olduğunda Convert.ToXXX () yöntemini kullanmalısınız çünkü performansı CXXX dönüşümlerinden daha iyi optimize eder.
Bir keresinde, daha hızlı olduğu için CStr () kullanmak için MSDN kitaplığı durumunu gördüğümü hatırlıyorum. Bunun doğru olup olmadığını bilmiyorum.