Convert.ToString () ve .ToString () arasındaki fark


158

Arasındaki fark nedir Convert.ToString()ve .ToString()?

Çevrimiçi olarak birçok fark buldum, ancak en büyük fark nedir?


7
Web'de birçok farklılığınız olduğunu söylüyorsunuz ve daha sonra bunun sadece bu belirli nedenden dolayı mı olduğunu soruyorsunuz? Web'de başka neler buldunuz?
Ryan

3
Convert.ToString (), CultureInfo'nun kullanılmasına izin veren bir aşırı yüke sahipken, .ToString () böyle bir aşırı yüklemeye sahip değildir.
Artemix

Yanıtlar:


232

Convert.ToString()kolları null, ancak ToString()değil.


3
iyi .. Bu nedenle sadece kullanıyorlar. iki yöntem?
TinTin

Ayrıca, yarı ilişkili, daha fazla ayrıntı için bu cevaba bakınız: stackoverflow.com/questions/496096/…
JYelton

JustDecompile / Reflector kullanarak farklar hakkında daha fazla bilgi: kodefuguru.com/post/2011/06/14/…
Ubikuity

5
İstediğiniz musunuz 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.
styfle

@Ubikuity: bağlantı kopuk
hdoghmen

64

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ş.


var arg = Request.Params.Get ("__ EVENTARGUMENT"); string _arg = Convert.ToString (arg); _arg, arg null olduğunda String.Empty'yi geri almıyor. neden?
vml19

2
@Nilaa yorum yapmak yerine bunu soran başka bir soru açmak isteyebilirsiniz. Benim ilk soru nedir gelmez arg boş olduğunda dönüş? Benim ilk düşüncem "arg" aslında zaten "dize" türü, bu yüzden sadece geçtiklerini döndüren Convert.ToString (...) aşırı yük çağırıyor olmasıdır. Bu tartışma yöntemin "nesne" aşırı yüklenmesi ile ilgilidir.
Chris Dwyer

4
@Roshe Evet, bundan biraz ısırdım. argüman ise Convert.ToString(string value)döndürür . argüman ise döndürür . nullnullConvert.ToString(object value)String.Emptynull
Tim Goodman

22

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

1
Bu doğru cevaba eklenmelidir çünkü oldukça önemli bir bilgidir.
Santhos

2
Sadece ek olarak - dayanarak referans kaynağı IConvertible önceliklidir IFormattablesırayla önceliklidir hangi Object.ToString()uygulanması.
Grx70

11

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.


11
int hiç boş olamaz çünkü örnek biraz geçersiz
MikeT

6

İ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.


2
Convert.ToString aslında null olup olmadığını kontrol eden güvenli bir yöntemdir ve değer null değilse, sadece ToString yöntemini çağırır. Bu nedenle, her durumda, geçersiz kılma ToString yönteminiz varsa, geçersiz kılınan ToString yönteminiz çağrılır.
ZafarYousafi

Ve bu sıfır güvenlik sadece sınıflarla uğraşıyorsanız yardımcı olur. Değer türleri boş olamaz ve bu nedenle onlara ToString yöntemini güvenle çağırabiliriz.
ZafarYousafi

5
object o=null;
string s;
s=o.toString();
//returns a null reference exception for string  s.

string str=convert.tostring(o);
//returns an empty string for string str and does not throw an exception.,it's 
//better to use convert.tostring() for good coding

4

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.

Object.ToString

Geçerli nesneyi temsil eden bir dize döndürür.


"hiçbir şey yazdırmıyor"? hiçbir şey nedir? null, ""veya "null"?
weston

3

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().


3

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)

1
Cevabınızdan oldukça memnunum. Dolayısıyla +1. Teşekkür ederim.
Ashok kumar

3

@ 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);

2

ToString()null değerleri işleyemez ve null olan değerleri convert.ToString()işleyebilir, bu nedenle sisteminizin null değer kullanımını işlemesini istediğinizde convert.ToString().


2

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();


2
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()
Fabio

0

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.

0

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


0

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.

Object.ToString Yöntemi :

class System.Object
{
    public string ToString(IFormatProvider provider)
    {
        return Number.FormatInt32(this, null, NumberFormatInfo.GetInstance(provider));
    }
}

Conver.ToString Yöntemi :

class System.Convert
{
    public static string ToString(object value)
    {
        return value.ToString(CultureInfo.CurrentCulture);
    }
}

0

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.


0
  • 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


-1

Convert.Tostring () işlevi, NULL işlevini işlerken .ToString () yöntemi çalışmaz. burayı ziyaret edin .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.