Jaka jest różnica między Convert.ToString()
i .ToString()
?
Znalazłem wiele różnic w Internecie, ale jaka jest główna różnica?
Jaka jest różnica między Convert.ToString()
i .ToString()
?
Znalazłem wiele różnic w Internecie, ale jaka jest główna różnica?
Odpowiedzi:
Convert.ToString()
uchwyty null
, a ToString()
nie.
null
zwrócić pusty ciąg, czy zgłosić wyjątek? To trochę jak różnica między rzucaniem a używaniem as
: 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.
Convert.ToString(string value)
zwraca, null
jeśli argumentem jest null
. Convert.ToString(object value)
zwraca, String.Empty
jeśli argumentem jest null
.
Oprócz innych odpowiedzi dotyczących obsługi null
wartości, Convert.ToString
próbuje użyć IFormattable
i IConvertible
interfejsów przed wywołaniem base Object.ToString
.
Przykład:
class FormattableType : IFormattable
{
private double value = 0.42;
public string ToString(string format, IFormatProvider formatProvider)
{
if (formatProvider == null)
{
// ... using some IOC-containers
// ... or using CultureInfo.CurrentCulture / Thread.CurrentThread.CurrentCulture
formatProvider = CultureInfo.InvariantCulture;
}
// ... doing things with format
return value.ToString(formatProvider);
}
public override string ToString()
{
return value.ToString();
}
}
Wynik:
Convert.ToString(new FormattableType()); // 0.42
new FormattableType().ToString(); // 0,42
IConvertible
ma pierwszeństwo przed IFormattable
, które z kolei ma pierwszeństwo przed Object.ToString()
wdrożeniem.
Rozumiemy różnicę z tego przykładu:
int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Możemy przekonwertować liczbę całkowitą i
za pomocą i.ToString ()
lub Convert.ToString
. Więc jaka jest różnica?
Podstawowa różnica między nimi polega na tym, że Convert
funkcja obsługuje wartości NULLS, a i.ToString ()
nie obsługuje ; zgłosi błąd wyjątku odwołania o wartości NULL. Dlatego dobra praktyka kodowania convert
jest zawsze bezpieczna.
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.
Metody są „w zasadzie” takie same, z wyjątkiem obsługi wartości null .
Pen pen = null;
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException
Z MSDN:
metoda Convert.ToString
Konwertuje określoną wartość na jej równoważną reprezentację w postaci ciągu.
Zwraca ciąg, który reprezentuje bieżący obiekt.
null
, ""
Lub "null"
?
W Convert.ToString()
programie Convert obsługuje NULL
wartość lub nie, ale .ToString()
nie obsługuje NULL
wartości i NULL
błędu wyjątku odwołania. Więc jest to dobra praktyka w użyciu Convert.ToString()
.
Dla miłośników kodu to najlepsza odpowiedź.
.............. Un Safe code ...................................
Try
' In this code we will get "Object reference not set to an instance of an object." exception
Dim a As Object
a = Nothing
a.ToString()
Catch ex As NullReferenceException
Response.Write(ex.Message)
End Try
'............... it is a safe code..............................
Dim b As Object
b = Nothing
Convert.ToString(b)
Convert.ToString(strName)
będzie obsługiwać wartości dopuszczające wartość null i strName.Tostring()
nie będzie obsługiwać wartości null i zgłaszać wyjątku.
Więc lepiej Convert.ToString()
wtedy użyć.ToString();
ToString() Vs Convert.ToString()
Podobieństwa: -
Oba są używane do konwersji określonego typu na łańcuch, tj. Int na string, float na string lub obiekt na string.
Różnica: -
ToString()
nie może obsłużyć wartości null w przypadku z Convert.ToString()
wartością null.
Przykład:
namespace Marcus
{
class Employee
{
public int Id { get; set; }
public string Name { get; set; }
}
class Startup
{
public static void Main()
{
Employee e = new Employee();
e = null;
string s = e.ToString(); // This will throw an null exception
s = Convert.ToString(e); // This will throw null exception but it will be automatically handled by Convert.ToString() and exception will not be shown on command window.
}
}
}
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:
int i =0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Tutaj obie metody są używane do konwersji ciągu, ale podstawowa różnica między nimi jest taka: Convert
funkcja obsługuje NULL
, podczas gdy i.ToString()
nie spowoduje to wyrzucenia NULL reference exception error.
tak dobrej praktyki kodowania przy użyciuconvert
są zawsze bezpieczne.
Zobaczmy inny przykład:
string s;
object o = null;
s = o.ToString();
//returns a null reference exception for s.
string s;
object o = null;
s = Convert.ToString(o);
//returns an empty string for s and does not throw an exception.
Convert.ToString(value)
najpierw próbuje rzutować obj na IConvertible , a następnie IFormattable, aby wywołać odpowiednie ToString(...)
metody. Jeśli zamiast tego wartość parametru została null
zwrócona string.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
napisałem ten kod i skompilowałem go.
class Program
{
static void Main(string[] args)
{
int a = 1;
Console.WriteLine(a.ToString());
Console.WriteLine(Convert.ToString(a));
}
}
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.
class System.Object
{
public string ToString(IFormatProvider provider)
{
return Number.FormatInt32(this, null, NumberFormatInfo.GetInstance(provider));
}
}
class System.Convert
{
public static string ToString(object value)
{
return value.ToString(CultureInfo.CurrentCulture);
}
}
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.
Convert.Tostring()
w zasadzie po prostu wywołuje następujące value == null ? String.Empty: value.ToString()
(string)variable
będzie rzutować tylko wtedy, gdy istnieje niejawny lub jawny operator na tym, co rzutujesz
ToString()
może być nadpisane przez typ (ma kontrolę nad tym, co robi), jeśli nie, to skutkuje nazwą typu
Oczywiście, jeśli obiekt ma wartość null , nie możesz uzyskać dostępu do elementu członkowskiego instancji ToString()
, spowoduje to wyjątek
Funkcja Convert.Tostring () obsługuje wartość NULL, podczas gdy metoda .ToString () nie. odwiedź tutaj .