Convert ilə Parse fərqi

Tip çevrilmələri hər zaman ehtiyacımız olan bir əməliyyatdır. Bunu etmək üçün isə Convert sinfi içərisindəki metodlardan ya da müvafiq tipin içərisindəki Parse() metodundan istifadə edirik. Məsələn, aşağıdakı ifadələrin hər biri “123” sətrini tam tipə çevirir:
        int a = Convert.ToInt32("123");
        int b = Int32.Parse("123");

Bəs bu iki çevrilmə arasındakı fərq nədir? Hər şeydən əvvəl Convert.ToInt32() metodunun 19 yenidən yüklənmiş variantı var, bu metod bütün tiplərdəki məlumatı qəbul edir və int - ə çevirə bilir. Yəni bu metod, ancaq string dəyişənlərini yox, həm də float, decimal, bool, byte kimi standart verilənlər tipini də tam tipə çevirir. Lakin, Parse() metodu ancaq string tipidə veriləni tam tipə çevirə bilir. Digər tərəfən, ToInt32() metodunun 2 “Exception”u olduğu halda, Parse() metodu 3 “Exception” – a malikdir. Aşağıdakı kod parçasına baxaq:
        string s1 = "123";
        string s2 = "45645645645645645645646546";
        string s3 = "salam";
        string s4 = null;

        int a = Convert.ToInt32(s1);  //Problemsiz çevriləcək 
        a = Convert.ToInt32(s2);      //OverflowException
        a = Convert.ToInt32(s3);      //FormatException
        a = Convert.ToInt32(s4);     //a = 0

Bu kod parçası icra olunsa, s2 sətrinin çevrilməsi zamanı “OverflowException” xətası alacağıq. Çünki, s2 sətrinin qiyməti bir ədəd kimi, int tipinin qiymətlər diapazonunu aşır. Növbəti s3 sətrinin çevrilməsi zamanı, “FormatException” xətası alacağıq. Çünki, s3 sətrinin qiyməti (“salam”), bir tam ədəd kimi ifadə oluna bilməz. s4 sətrinin çevrilməsi zamanı isə, arqument NULL olduğu üçün, ToInt32() metodu bu vəziyyətdə susmaya görə (default) 0 qaytarır. Beləliklə, ToInt32() metodunun OverflowException və FormatException olan iki xətası var. İndi isə aşağıdakı kod parçasına baxaq:
        string s1 = "123";
        string s2 = "45645645645645645645646546";
        string s3 = "salam";
        string s4 = null;

        int a = Int32.Parse(s1);      //Problemsiz çevriləcək 
        a = Int32.Parse(s2);          //OverflowException
        a = Int32.Parse(s3);          //FormatException
        a = Int32.Parse(s4);          //ArgumentNullException

Bu kod parçasında isə 3 icra xətası gözlənilir. s2 və s3 sətirlərinin çevrilməsi zamanı yaranan xəta hər iki metodda eynidir. Lakin, Parse() metodu Int32() metodundan fərqli olaraq, NULL arqumenti tam tipə çevirmir və bu vəziyyəti bir “ArgumentNullException” kimi ifadə edir. Beləliklə, Parse() metodunun OverflowException, ArgumentNullException və FormatException olan 3 xətası var.

Bununla belə, əgər çevrilmə zamanı istənilən vəziyyətdə bir xəta almaq istəmirsinizsə, onda TryParse() metodundan istifadə edə bilərik. Bu metod iki parametrli metoddur və geriyə bool tipdə qiymət qaytarır. Metodu ikinci parametri out kimi təyin olunub. Əgər birinci parametrinə ötürülən arqument int tipinə (əslində metod hansı tip ilə çağrılıbsa ona) çevrilə bilirsə metod geriyə true qiyməti qaytarır və çevrilmənin nəticəsini ikinci parametr üzrindən geri göndərir. Əks halda metod false qiyməti qaytarır. Aşağıdakı proqram nümunəsinə baxaq:
using System;
class Soft
{
    public static void Main()
    {
        int netice = 0;
        string s1 = "123";
        string s2 = "salam";
        string s4 = null;

        if(Int32.TryParse(s1, out netice))
            Console.WriteLine("s1 deyisheni tam tipe cevrile biler");
        else Console.WriteLine("s1 deyisheni tam tipe cevrile bilmez");

        if(Int32.TryParse(s2, out netice))
            Console.WriteLine("s2 deyisheni tam tipe cevrile biler");
        else Console.WriteLine("s2 deyisheni tam tipe cevrile bilmez");
        Console.ReadKey();
    }
}

Nəticə isə aşağıdakı imi olur:

2463    11.04.2014
C# Convert Parse Çevrilmə Tip Proqramlaşdırma



Şərhlər (3)
/// 21.05.2017 03:14

////


03.05.2017 23:04


03.05.2017 23:04


Şərh yazın