C# programlamada dizeleri tam sayılara dönüştürmek temel bir görevdir. Bu makale, çeşitli senaryoları ve olası hataları ele almada en iyi uygulamaları vurgulayarak en verimli ve sağlam yöntemleri inceliyor.
İçindekiler Tablosu
- Sağlam
TryParse()
Metotları Parse()
Metotları: Basit Ancak RiskliConvert.ToInt*()
Metotları: Düşünülecek Alternatifler- İhtiyaçlarınıza Uygun Metodu Seçme
Sağlam TryParse()
Metotları
TryParse()
metotları (örneğin, Int32.TryParse()
, Int64.TryParse()
, Int16.TryParse()
), C#’ta dize-tam sayı dönüşümü için genellikle tercih edilen yaklaşımdır. İstisnalardan kaçınarak Parse()
metotlarına göre önemli bir avantaj sunarlar. Bunun yerine, ayrıştırılmış tam sayıyı bir out
parametresi aracılığıyla döndürerek başarı veya başarısızlığı gösteren bir Boole değeri döndürürler.
Bu yaklaşım, try-catch
bloklarına olan ihtiyacı ortadan kaldırarak verimliliği ve kod okunabilirliğini artırır. TryParse()
ayrıca taşma istisnalarını da zarif bir şekilde ele alarak istisna fırlatmak yerine false
döndürür.
string strNumber = "12345";
int number;
bool success = Int32.TryParse(strNumber, out number);
if (success)
{
Console.WriteLine("Tam sayı değeri: " + number);
}
else
{
Console.WriteLine("Geçersiz giriş. Dize geçerli bir tam sayı değil.");
}
Parse()
Metotları: Basit Ancak Riskli
Parse()
metotları (örneğin, Int32.Parse()
, Int64.Parse()
, Int16.Parse()
), dizeleri tam sayılara dönüştürmenin daha özlü bir yolunu sunar, ancak önemli bir dezavantajları vardır: Giriş dizisi geçerli bir tam sayı gösterimi değilse istisnalar (FormatException
) fırlatırlar. Bu, karmaşıklık ve potansiyel performans ek yükü ekleyerek try-catch
blokları kullanılmasını gerektirir.
string strNumber = "12345";
int number;
try
{
number = Int32.Parse(strNumber);
Console.WriteLine("Tam sayı değeri: " + number);
}
catch (FormatException)
{
Console.WriteLine("Geçersiz giriş. Dize geçerli bir tam sayı değil.");
}
Sözdizimi açısından daha basit olsa da, ele alınmayan istisnaların artan riski, TryParse()
‘ı daha güvenli ve genellikle daha iyi bir alternatif yapar.
Convert.ToInt*()
Metotları: Düşünülecek Alternatifler
Convert
sınıfı, Convert.ToInt32()
, Convert.ToInt64()
ve Convert.ToInt16()
gibi metotlar sağlar. Parse()
‘a işlevsel olarak benzer şekilde, bunlar da başarısız olunca istisna fırlatırlar. Boşlukları veya sınır durumlarını işlemekte ince farklılıklar sunabilirler, ancak istisnalara karşı aynı savunmasızlığı paylaşırlar, bu da TryParse()
‘ı daha sağlam seçenek yapar.
string strNumber = "12345";
int number;
try
{
number = Convert.ToInt32(strNumber);
Console.WriteLine("Tam sayı değeri: " + number);
}
catch (FormatException)
{
Console.WriteLine("Geçersiz giriş. Dize geçerli bir tam sayı değil.");
}
İhtiyaçlarınıza Uygun Metodu Seçme
Çoğu senaryo için TryParse()
önerilen yaklaşımdır. İstisna işleme güvenliği ve verimliliği onu üstün bir seçim yapar. İstisnaları doğrudan kodunuzda işlemek ve potansiyel performans etkilerini anlamak için çok özel bir nedeniniz olduğunda yalnızca Parse()
veya Convert.ToInt*()
kullanın. Her zaman giriş değerlerinizin beklenen aralığına göre uygun tam sayı türünü (Int16
, Int32
, Int64
) seçin.