Jaka jest różnica między Convert.ToString()
i .ToString()
?
Znalazłem wiele różnic w Internecie, ale jaka jest główna różnica?
c#
type-conversion
tostring
TinTin
źródło
źródło
Odpowiedzi:
Convert.ToString()
uchwytynull
, aToString()
nie.źródło
null
zwrócić pusty ciąg, czy zgłosić wyjątek? To trochę jak różnica między rzucaniem a używaniemas
: cicha konwersja.Wywołanie
ToString()
obiektu zakłada, że obiekt nie jest pusty (ponieważ obiekt musi istnieć, aby wywołać metodę instancji).Convert.ToString(obj)
nie musi zakładać, że obiekt nie jest null (ponieważ jest to metoda statyczna w klasie Convert), ale zamiast tego zwróci wartość,String.Empty
jeśli ma wartość null.źródło
Convert.ToString(string value)
zwraca,null
jeśli argumentem jestnull
.Convert.ToString(object value)
zwraca,String.Empty
jeśli argumentem jestnull
.Oprócz innych odpowiedzi dotyczących obsługi
null
wartości,Convert.ToString
próbuje użyćIFormattable
iIConvertible
interfejsów przed wywołaniem baseObject.ToString
.Przykład:
Wynik:
źródło
IConvertible
ma pierwszeństwo przedIFormattable
, które z kolei ma pierwszeństwo przedObject.ToString()
wdrożeniem.Rozumiemy różnicę z tego przykładu:
Możemy przekonwertować liczbę całkowitą
i
za pomocąi.ToString ()
lubConvert.ToString
. Więc jaka jest różnica?Podstawowa różnica między nimi polega na tym, że
Convert
funkcja obsługuje wartości NULLS, ai.ToString ()
nie obsługuje ; zgłosi błąd wyjątku odwołania o wartości NULL. Dlatego dobra praktyka kodowaniaconvert
jest zawsze bezpieczna.źródło
Możesz utworzyć klasę i zastąpić
toString
metodę, aby zrobiła cokolwiek chcesz.Na przykład - możesz utworzyć klasę „MyMail” i nadpisać
toString
metodę wysyłania wiadomości e-mail lub wykonać inną operację zamiast pisania bieżącego obiektu.Convert.toString
Konwertuje Podana wartość jego odpowiednik ciąg znaków.źródło
źródło
Metody są „w zasadzie” takie same, z wyjątkiem obsługi wartości null .
Z MSDN:
metoda Convert.ToString
Object.ToString
źródło
null
,""
Lub"null"
?W
Convert.ToString()
programie Convert obsługujeNULL
wartość lub nie, ale.ToString()
nie obsługujeNULL
wartości iNULL
błędu wyjątku odwołania. Więc jest to dobra praktyka w użyciuConvert.ToString()
.źródło
Dla miłośników kodu to najlepsza odpowiedź.
źródło
Zgadzam się z odpowiedzią @ Ryan . Nawiasem mówiąc, zaczynając od C # 6.0 do tego celu możesz użyć:
lub
zamiast
źródło
ToString()
nie obsługuje wartości null iconvert.ToString()
może obsługiwać wartości, które są zerowe, więc gdy chcesz, aby system obsługiwał wartości nullconvert.ToString()
.źródło
Convert.ToString(strName)
będzie obsługiwać wartości dopuszczające wartość null istrName.Tostring()
nie będzie obsługiwać wartości null i zgłaszać wyjątku.Więc lepiej
Convert.ToString()
wtedy użyć.ToString();
źródło
Oba są używane do konwersji określonego typu na łańcuch, tj. Int na string, float na string lub obiekt na string.
ToString()
nie może obsłużyć wartości null w przypadku zConvert.ToString()
wartością null.Przykład:
źródło
Convert.ToString
nie obsługiwaćNull Exception
. po prostu zrób:return value == null ? string.Empty : value.ToString()
Aby zrozumieć obie metody, weźmy przykład:
Tutaj obie metody są używane do konwersji ciągu, ale podstawowa różnica między nimi jest taka:
Convert
funkcja obsługujeNULL
, podczas gdyi.ToString()
nie spowoduje to wyrzuceniaNULL reference exception error.
tak dobrej praktyki kodowania przy użyciuconvert
są zawsze bezpieczne.Zobaczmy inny przykład:
źródło
Convert.ToString(value)
najpierw próbuje rzutować obj na IConvertible , a następnie IFormattable, aby wywołać odpowiednieToString(...)
metody. Jeśli zamiast tego wartość parametru zostałanull
zwróconastring.Empty
. W ostateczności wróć,obj.ToString()
jeśli nic innego nie zadziałało.Warto zaznaczyć, że
Convert.ToString(value)
może powrócićnull
npvalue.ToString()
zwraca null.Zobacz źródło odniesienia .Net
źródło
napisałem ten kod i skompilowałem go.
używając „inżynierii odwrotnej” ( ilspy ) stwierdzam, że „object.ToString ()” i „Convert.ToString (obj)” robią dokładnie jedną rzecz. infact 'Convert.ToString (obj)' call 'object.ToString ()' więc 'object.ToString ()' jest szybsze.
źródło
W C # jeśli zadeklarujesz zmienną łańcuchową i nie przypiszesz żadnej wartości do tej zmiennej, domyślnie ta zmienna przyjmuje wartość null. W takim przypadku, jeśli użyjesz metody ToString (), Twój program zgłosi wyjątek odwołania zerowego. Z drugiej strony, jeśli użyjesz metody Convert.ToString (), Twój program nie zgłosi wyjątku.
źródło
Convert.Tostring()
w zasadzie po prostu wywołuje następującevalue == null ? String.Empty: value.ToString()
(string)variable
będzie rzutować tylko wtedy, gdy istnieje niejawny lub jawny operator na tym, co rzutujeszToString()
może być nadpisane przez typ (ma kontrolę nad tym, co robi), jeśli nie, to skutkuje nazwą typuOczywiście, jeśli obiekt ma wartość null , nie możesz uzyskać dostępu do elementu członkowskiego instancji
ToString()
, spowoduje to wyjątekźródło
Funkcja Convert.Tostring () obsługuje wartość NULL, podczas gdy metoda .ToString () nie. odwiedź tutaj .
źródło