Arasındaki fark nedir Convert.ToString()ve .ToString()?
Çevrimiçi olarak birçok fark buldum, ancak en büyük fark nedir?
Arasındaki fark nedir Convert.ToString()ve .ToString()?
Çevrimiçi olarak birçok fark buldum, ancak en büyük fark nedir?
Yanıtlar:
Convert.ToString()kolları null, ancak ToString()değil.
nullistisna boş bir dize döndürür veya atmak? Bu, döküm ve kullanma arasındaki fark gibidir as: sessiz dönüşüm.
ToString()Bir nesneyi çağırmak , nesnenin boş olmadığını varsayar (çünkü bir nesne üzerinde bir örnek yöntemini çağırmak için var olması gerekir). Convert.ToString(obj)(Bu dönüştürme sınıfı statik bir yöntemdir gibi), ancak bunun yerine dönecektir nesneyi tahmin gerekmez boş değil String.Emptyo takdirde ise boş.
Convert.ToString(string value)döndürür . argüman ise döndürür . nullnullConvert.ToString(object value)String.Emptynull
nullDeğerleri işlemeyle ilgili diğer yanıtlara ek olarak , base çağırmadan önce Convert.ToStringkullanmaya IFormattableve IConvertiblearabirimlere çalışır Object.ToString.
Misal:
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();
}
}
Sonuç:
Convert.ToString(new FormattableType()); // 0.42
new FormattableType().ToString(); // 0,42
IConvertible önceliklidir IFormattablesırayla önceliklidir hangi Object.ToString()uygulanması.
Farkı bu örnekle anlayalım:
int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Biz tamsayı dönüştürebilirsiniz ikullanarak i.ToString ()veya Convert.ToString. Peki fark nedir?
Aralarındaki temel fark, ConvertNULLS işlevini yerine getirmeyen işlevdir i.ToString (); bir NULL referans istisna hatası atar. Böylece iyi kodlama uygulamaları kullanmak converther zaman güvenlidir.
İstediğiniz her toStringşeyi yapmak için bir sınıf oluşturabilir ve yöntemi geçersiz kılabilirsiniz .
Örneğin, "MyMail" sınıfı oluşturabilir toStringve geçerli nesneyi yazmak yerine bir e-posta gönderme veya başka bir işlem yapma yöntemini geçersiz kılabilirsiniz .
Convert.toStringEşdeğer dize gösterimine belirtilen değere dönüştürür.
Yöntemler, null kullanımı dışında , "temel olarak" aynıdır .
Pen pen = null;
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException
MSDN'den:
Convert.ToString Yöntemi
Belirtilen değeri eşdeğer dize temsiline dönüştürür.
Geçerli nesneyi temsil eden bir dize döndürür.
null, ""veya "null"?
Gelen Convert.ToString(), dönüştürme kolları bir ya NULLdeğer ya da değil ama .ToString()bir işler gelmez NULLdeğeri ve bir NULLreferans durum hata. Bu yüzden kullanmak iyi bir uygulamadır Convert.ToString().
Kod severler için bu en iyi cevaptır.
.............. 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)
@ Ryan'ın cevabına katılıyorum . Bu arada, bu amaç için C # 6.0 ile başlayarak şunları kullanabilirsiniz:
someString?.ToString() ?? string.Empty;
veya
$"{someString}"; // I do not recommend this approach, although this is the most concise option.
onun yerine
Convert.ToString(someString);
Convert.ToString(strName)null değerlerini strName.Tostring()işleyecek ve null değeri işlemeyecek ve bir istisna atmayacaktır.
Bu yüzden kullanmak Convert.ToString()daha iyidir.ToString();
ToString() Vs Convert.ToString()
Benzerlikler: -
Her ikisi de belirli bir türü dizeye dönüştürmek için kullanılır; örneğin int, string, float to string veya bir nesneyi string olarak.
Fark: -
ToString()Convert.ToString()boş değer işlenirken boş değer işlenemez.
Misal :
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.ToStringidare etmeyin Null Exception. basitçe yapar:return value == null ? string.Empty : value.ToString()
Her iki yöntemi de anlamak için bir örnek verelim:
int i =0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Burada her iki yöntem de dizeyi dönüştürmek için kullanılır, ancak aralarındaki temel fark şudur: Convertişlev tutamaçları NULL, i.ToString()atmazken NULL reference exception error.iyi bir kodlama uygulaması kullanmak converther zaman güvenlidir.
Başka bir örnek görelim:
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)için obj döküm ilk çalışır IConvertible ardından IFormattable gelen aramaya ToString(...)yöntemleri. Bunun yerine parametre değeri nulldöndürüldü string.Empty. Son çare olarak, obj.ToString()başka hiçbir şey işe yaramadı dönmek .
Belirterek It değerinde Convert.ToString(value) olabilir dönmek nullörnek için eğer value.ToString()döner boş.
Net referans kaynağına bakın
bu kodu yazdım ve derledim.
class Program
{
static void Main(string[] args)
{
int a = 1;
Console.WriteLine(a.ToString());
Console.WriteLine(Convert.ToString(a));
}
}
'tersine mühendislik' ( ilspy ) kullanarak ' object.ToString ()' ve 'Convert.ToString (obj)' tam olarak bir şey bulmak. infact 'Convert.ToString (obj)' call 'object.ToString ()' yani 'object.ToString ()' daha hızlıdır.
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);
}
}
C # 'da bir dize değişkeni bildirirseniz ve bu değişkene herhangi bir değer atamazsanız, varsayılan olarak bu değişken boş değer alır. Böyle bir durumda, ToString () yöntemini kullanırsanız, programınız null başvuru istisnasını atar. Öte yandan, Convert.ToString () yöntemini kullanırsanız, programınız bir istisna atmaz.
Convert.Tostring() temel olarak sadece aşağıdakileri çağırır value == null ? String.Empty: value.ToString()
(string)variableSadece edecek döküm bir olduğunda örtülü veya açık yayınlıyordunuz ne üzerinde operatör
ToString()tür tarafından geçersiz kılınabilir (ne yaptığı üzerinde kontrolü vardır), değilse türün adıyla sonuçlanır
Açıkçası bir nesne null ise , örnek üyeye erişemezsiniz ToString(), bu bir istisnaya neden olur
Convert.Tostring () işlevi, NULL işlevini işlerken .ToString () yöntemi çalışmaz. burayı ziyaret edin .