Yanıtlar:
Parse
değeri ayrıştıramazsa bir istisna atarken, başarılı olup olmadığını gösteren TryParse
bir döndürür bool
.
TryParse
sadece try
/ catch
dahili olarak değil - bütün mesele, istisnasız uygulanması ve böylece hızlı olmasıdır. Aslında, büyük olasılıkla uygulanma şekli, Parse
yöntemin dahili olarak çağırması TryParse
ve geri dönerse bir istisna atmasıdır false
.
Özetle, Parse
değerin geçerli olacağından eminseniz kullanın ; aksi takdirde kullanın TryParse
.
Dize bir tam sayıya dönüştürülemezse, o zaman
int.Parse()
bir istisna atacakint.TryParse()
yanlış döndürür (ancak bir istisna oluşturmaz)TryParse yöntemi, bir şeyin ayrıştırılabilir olup olmadığını test etmenize olanak sağlar. Ayrıştırmayı ilk örnekte olduğu gibi geçersiz bir int ile denerseniz, TryParse'deyken bir istisna alırsınız, ayrıştırmanın başarılı olup olmadığını size bildiren bir boole döndürür.
Dipnot olarak, çoğu TryParse yöntemine null olarak geçmek bir istisna oluşturacaktır.
Bir dizeden belirtilen veri türüne dönüştürme başarısız olursa ayrıştırma bir istisna atarken, TryParse açıkça bir istisna atılmasını önler.
TryParse değeri döndürmez, ayrıştırmanın başarılı olup olmadığını belirtmek için bir durum kodu döndürür (ve bir istisna oluşturmaz).
Kayıt için iki kodu test ediyorum: Bu sadece bir dizeden bir sayıya dönüştürmeye çalışır ve başarısız olursa sayıyı sıfıra atar.
if (!Int32.TryParse(txt,out tmpint)) {
tmpint = 0;
}
ve:
try {
tmpint = Convert.ToInt32(txt);
} catch (Exception) {
tmpint = 0;
}
C # için en iyi seçenek tryparse kullanmaktır çünkü try & Catch alternatifi istisna atılır
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
Acı verici yavaş ve istenmeyen bir durumdur, ancak Debug istisnası onunla durdurulmadığı sürece kod durmaz.
Bunun çok eski bir gönderi olduğunu biliyorum, ancak Parse vs TryParse hakkında birkaç ayrıntı daha paylaşmayı düşündüm.
DateTime'ın String'e dönüştürülmesi gereken ve datevalue null veya string.empty ise bir istisna ile karşı karşıya olduğumuz bir senaryom vardı. Bunun üstesinden gelmek için Parse'yi TryParse ile değiştirdik ve varsayılan tarihi alacağız.
Eski Kod:
dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");
Yeni kod:
DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);
Başka bir değişken bildirmeli ve TryParse için Out olarak kullanılmalıdır.
startDate
ve her zaman endDate
olduğu gibi DateTime.TryParse
bunların üzerine yazabilirsiniz DateTime.MinValue
. Yanlış tarih temsillerinin farklı bir değere dönüştürülmesi gerekiyorsa, dönüş değerini kontrol edin DateTime.TryParse
ve yanlışsa değeri açıkça ayarlayın.
DateTime?
( DateTime nullable ) kullanma
double.Parse ( "-"); double. TryParse ("-", ayrıştırılmış); 0'a ayrıştırır, bu yüzden TryParse'ın daha karmaşık dönüşümler yaptığını tahmin ediyorum.
TryParse
dönmek true
ya false
? "Geçerli" olup olmadığını bu şekilde anlayacaksınız.