Konwertowanie typu zmiennej

0

Witam,

Ostatnio pisze projekty, w których dość dużo jest obliczeń matematycznych. Zacząłem sie zastanawiać jak jest różnica między użyciem statycznej metody klasu Convert (np. Convert.ToSingle ) a metodą klasy Single (Single.Parse)?

Z góry dzięki za odpowiedz:)

0
public static class Convert {

...

public static float ToSingle(string value)
{
    if (value == null)
    {
        return 0f;
    }
    return float.Parse(value, CultureInfo.CurrentCulture);
}
public struct Single : IComparable, IFormattable, IConvertible, IComparable<float>, IEquatable<float> {

...

public static float Parse(string s)
{
    return Parse(s, NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo);
}
0

W ogóle zamiast używania Parse lepiej używać TryParse np.

string tekst = this.textBox1.Text;
int liczba = 0;
if (int.TryParse(tekst, out liczba))
{
    //Dalsza czesc
}
else
{
     //Komunikat bledu - nie udalo sie skonwertowac tekstu do liczby
}

Jest to ważne, żeby obsłużyć błędy, kiedy dane wejściowe mogą ale nie muszą być dobre.

0

Single.Parse() za parametr przyjmuje tylko stringa.
Convert.ToSingle() ma wiele przeciążeń, dla różnych obiektów (string, int, decimal itd). W przypadku stringa i tak wywołuje Single.Parse() ;)

Co do Single.TryParse(), równie dobrze można zrobić objąć Single.Parse(tekst) w try..catch, nie wiem które wydajniejsze.

0

TeWuX: tryParse nie rzuca wyjątku, więc nie ma potrzeby nic łapać. to jest duża zaleta, bo blok try/catch daje spory narzut obliczeniowy - dlatego tryParse jest wydajniejsze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0