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.
nullzwró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.Emptyjeśli ma wartość null.
Convert.ToString(string value)zwraca, nulljeśli argumentem jest null. Convert.ToString(object value)zwraca, String.Emptyjeśli argumentem jest null.
Oprócz innych odpowiedzi dotyczących obsługi nullwartości, Convert.ToStringpróbuje użyć IFormattablei IConvertibleinterfejsó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ą iza pomocą i.ToString ()lub Convert.ToString. Więc jaka jest różnica?
Podstawowa różnica między nimi polega na tym, że Convertfunkcja 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 convertjest zawsze bezpieczna.
Możesz utworzyć klasę i zastąpić toStringmetodę, aby zrobiła cokolwiek chcesz.
Na przykład - możesz utworzyć klasę „MyMail” i nadpisać toStringmetodę wysyłania wiadomości e-mail lub wykonać inną operację zamiast pisania bieżącego obiektu.
Convert.toStringKonwertuje 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 NULLwartość lub nie, ale .ToString()nie obsługuje NULLwartości i NULLbłę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.ToStringnie 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: Convertfunkcja 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 nullzwró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ć nullnpvalue.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)variablebę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 .