ความแตกต่างระหว่าง Convert.ToString () และ. ToString ()


158

ความแตกต่างระหว่างConvert.ToString()และ.ToString()คืออะไร?

ฉันพบความแตกต่างมากมายทางออนไลน์ แต่ความแตกต่างที่สำคัญคืออะไร


7
คุณบอกว่าคุณมีความแตกต่างมากมายบนเว็บและต่อมาคุณถามว่ามันมีเหตุผลเฉพาะนี้หรือไม่ คุณค้นพบอะไรบนเว็บ
Ryan

3
Convert.ToString () มีโอเวอร์โหลดที่อนุญาตให้ใช้ CultureInfo ขณะที่. ToString () ไม่มีโอเวอร์โหลดดังกล่าว
Artemix

คำตอบ:


232

Convert.ToString()จัดการnullในขณะที่ToString()ไม่


3
ดี .. ด้วยเหตุนี้เฉพาะพวกเขาเท่านั้นที่ใช้ สองวิธี?
TinTin

นอกจากนี้ที่เกี่ยวข้องกับกึ่งดูคำตอบนี้สำหรับรายละเอียดเพิ่มเติม: stackoverflow.com/questions/496096//
JYelton

ข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างโดยใช้ JustDecompile / Reflector: kodefuguru.com/post/2011/06/14/…
Ubikuity

5
คุณต้องการnullส่งคืนสตริงว่างหรือโยนข้อยกเว้นหรือไม่ มันเหมือนกับความแตกต่างระหว่างการคัดเลือกนักแสดงและการใช้as: การแปลงแบบเงียบ
สไตล์

@Ubikuity: ลิงก์เสีย
hdoghmen

64

การเรียกใช้ToString()บนวัตถุสันนิษฐานว่าวัตถุนั้นไม่เป็นโมฆะ (เนื่องจากวัตถุจำเป็นต้องมีอยู่เพื่อเรียกเมธอดอินสแตนซ์กับมัน) Convert.ToString(obj)ไม่จำเป็นต้องสันนิษฐานว่าวัตถุนั้นไม่ใช่โมฆะ (เนื่องจากเป็นวิธีการคงที่ในคลาสแปลง) แต่จะกลับมาString.Emptyหากเป็นโมฆะ


var arg = Request.Params.Get ("__ EVENTARGUMENT"); string _arg = Convert.ToString (หาเรื่อง); _arg ไม่รักษา String.Empty เมื่อ arg เป็นโมฆะ ทำไม?
vml19

2
@Nilaa คุณอาจต้องการเปิดคำถามอื่นที่ถามถึงสิ่งนี้แทนที่จะแสดงความคิดเห็น คำถามแรกของฉันคือสิ่งที่ไม่มันกลับมาเมื่อหาเรื่องเป็นโมฆะ? ความคิดแรกของฉันคือ "arg" เป็นประเภทสตริง "จริง" อยู่แล้วดังนั้นคุณจึงเรียกโอเวอร์โหลดของ Convert.ToString (... ) ที่เพิ่งส่งคืนสิ่งที่คุณส่งไป การสนทนานี้เกี่ยวกับ "วัตถุ" เกินพิกัดของวิธีการ
Chris Dwyer

4
@Roshe ใช่ฉันเพิ่งได้รับบิตนี้ Convert.ToString(string value)ส่งกลับถ้าอาร์กิวเมนต์เป็น null ส่งกลับถ้าอาร์กิวเมนต์เป็น nullConvert.ToString(object value)String.Emptynull
ทิมกู๊ดแมน

22

นอกเหนือไปจากคำตอบอื่น ๆ เกี่ยวกับการจัดการnullค่าConvert.ToStringพยายามที่จะใช้IFormattableและการเชื่อมต่อก่อนที่จะเรียกฐานIConvertibleObject.ToString

ตัวอย่าง:

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

ผลลัพธ์:

Convert.ToString(new FormattableType()); // 0.42
new FormattableType().ToString();        // 0,42

1
ควรเพิ่มคำตอบที่ถูกต้องเพราะเป็นข้อมูลที่สำคัญมาก
Santhos

2
เช่นเดียวกับการเสริมโดยอิงตามแหล่งอ้างอิง IConvertibleจะมีความสำคัญมากกว่าIFormattableซึ่งจะมีความสำคัญเหนือกว่าObject.ToString()การใช้งาน
Grx70

11

ให้เข้าใจความแตกต่างผ่านตัวอย่างนี้:

int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));

เราสามารถแปลงจำนวนเต็มiใช้หรือi.ToString () Convert.ToStringดังนั้นความแตกต่างคืออะไร?

ความแตกต่างพื้นฐานระหว่างพวกเขาคือConvertฟังก์ชั่นจัดการ NULLS ในขณะที่i.ToString ()ไม่ได้; มันจะโยนข้อผิดพลาดข้อยกเว้นอ้างอิง NULL ดังนั้นการใช้โค้ดที่ดีconvertจึงปลอดภัยเสมอ


11
คุณเป็นตัวอย่างที่ไม่ถูกต้องเล็กน้อยเนื่องจาก int ไม่สามารถเป็นโมฆะได้
MikeT

6

คุณสามารถสร้างคลาสและแทนที่toStringวิธีการทำสิ่งที่คุณต้องการ

ตัวอย่างเช่นคุณสามารถสร้างคลาส"MyMail"และแทนที่toStringวิธีการส่งอีเมลหรือดำเนินการอื่นแทนการเขียนวัตถุปัจจุบัน

Convert.toStringแปลงค่าที่ระบุเพื่อแสดงสตริงเทียบเท่า


2
Convert.ToString จริง ๆ แล้วเป็นวิธีที่ปลอดภัยซึ่งตรวจสอบค่าว่างและถ้าค่าไม่เป็นโมฆะ ดังนั้นในกรณีใด ๆ ถ้าคุณมีวิธีการ ToString ที่ overriden วิธี ToString ของคุณจะถูกเรียก
ZafarYousafi

และความปลอดภัยนี้จะช่วยได้ก็ต่อเมื่อคุณจัดการเรียน ประเภทค่าไม่สามารถเป็นค่าว่างได้และเราสามารถเรียกใช้เมธอด ToString ได้อย่างปลอดภัย
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

วิธีการที่จะ "พื้น" เดียวกันยกเว้นจัดการnull

Pen pen = null; 
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException

จาก MSDN:
วิธีการ Convert.ToString

แปลงค่าที่ระบุเป็นการแสดงค่าสตริงที่เทียบเท่า

Object.ToString

ส่งคืนสตริงที่แสดงถึงวัตถุปัจจุบัน


"พิมพ์อะไร"? ไม่มีอะไร null, ""หรือ"null"?
weston

3

ในConvert.ToString()การแปลงจัดการNULLค่าหรือไม่ แต่.ToString()มันไม่จัดการNULLค่าและNULLข้อผิดพลาดข้อยกเว้นการอ้างอิง ดังนั้นจึงเป็นการใช้งานที่Convert.ToString()ดี


3

สำหรับคนรักรหัสนี่เป็นคำตอบที่ดีที่สุด

    .............. 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
ฉันค่อนข้างพอใจกับคำตอบของคุณ ดังนั้น +1 ขอบคุณ.
Ashok kumar

3

ฉันเห็นด้วยกับคำตอบของ@ Ryan โดยวิธีการเริ่มต้นด้วย C # 6.0 เพื่อจุดประสงค์นี้คุณสามารถใช้:

someString?.ToString() ?? string.Empty;

หรือ

$"{someString}"; // I do not recommend this approach, although this is the most concise option.

แทน

Convert.ToString(someString);

2

ToString()ไม่สามารถจัดการกับค่า null และสามารถจัดการกับค่าที่เป็นโมฆะดังนั้นเมื่อคุณต้องการระบบการจัดการการใช้งานคุ้มค่าconvert.ToString() nullconvert.ToString()


2

Convert.ToString(strName)จะจัดการกับค่าที่สามารถเป็นโมฆะและstrName.Tostring()จะไม่จัดการกับค่าที่เป็นโมฆะและโยนข้อยกเว้น

ดังนั้นมันจะดีกว่าที่จะใช้Convert.ToString()แล้ว.ToString();


2
ToString() Vs Convert.ToString()

ความคล้ายคลึงกัน: -

ทั้งสองจะใช้ในการแปลงประเภทที่เฉพาะเจาะจงเพื่อสตริงเช่น int เพื่อสตริงลอยเป็นสตริงหรือวัตถุที่สตริง

ความแตกต่าง: -

ToString()ไม่สามารถจัดการค่าว่างในขณะที่ในกรณีที่Convert.ToString()จะจัดการกับค่า null

ตัวอย่าง:

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.ToStringNull Exceptionไม่ได้จัดการ ทำได้ง่ายๆ:return value == null ? string.Empty : value.ToString()
Fabio

0

เพื่อให้เข้าใจทั้งสองวิธีลองดูตัวอย่าง:

int i =0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i)); 

ที่นี่ทั้งสองวิธีจะใช้ในการแปลงสตริง แต่ความแตกต่างพื้นฐานระหว่างพวกเขาคือ: Convertจัดการฟังก์ชั่นNULLในขณะที่i.ToString()มันจะไม่โยนNULL reference exception error.ดังนั้นการฝึกการเขียนโปรแกรมที่ดีใช้convertปลอดภัยเสมอ

ลองดูตัวอย่างอื่น:

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)ก่อนอื่นให้ลองทำการ obj กับIConvertibleจากนั้นIFormattableเพื่อเรียกToString(...)วิธีการที่เกี่ยวข้อง ถ้าแทนค่าพารามิเตอร์ที่ถูกแล้วกลับnull string.Emptyเป็นทางเลือกสุดท้ายให้กลับมาobj.ToString()ถ้าไม่มีอะไรทำงาน

เป็นที่น่าสังเกตว่าConvert.ToString(value) สามารถส่งคืนได้nullหากตัวอย่างvalue.ToString()คืนค่าเป็นศูนย์

ดูแหล่งอ้างอิง. Net


0

ฉันเขียนโค้ดนี้และรวบรวมมัน

class Program
{
    static void Main(string[] args)
    {
        int a = 1;
        Console.WriteLine(a.ToString());
        Console.WriteLine(Convert.ToString(a));
    }
}

โดยใช้ 'วิศวกรรมย้อนกลับ' ( ilspy ) ฉันหา 'object.ToString ()' และ 'Convert.ToString (obj)' ทำสิ่งเดียว infact 'Convert.ToString (obj)' call 'object.ToString ()' ดังนั้น'object.ToString ()' จึงเร็วขึ้น

วิธีการ Object.ToString :

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

วิธีการแปลง ToString :

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

0

ใน C # หากคุณประกาศตัวแปรสตริงและหากคุณไม่ได้กำหนดค่าใด ๆ ให้กับตัวแปรนั้นโดยค่าเริ่มต้นแล้วตัวแปรจะรับค่า Null ในกรณีเช่นนี้หากคุณใช้เมธอด ToString () โปรแกรมของคุณจะแสดงข้อยกเว้นการอ้างอิงเป็นโมฆะ ในทางกลับกันถ้าคุณใช้เมธอด Convert.ToString () โปรแกรมของคุณจะไม่ส่งข้อยกเว้น


0
  • Convert.Tostring() โดยทั่วไปเพียงแค่เรียกสิ่งต่อไปนี้ value == null ? String.Empty: value.ToString()

  • (string)variableจะส่งเฉพาะเมื่อมีโอเปอเรเตอร์โดยนัยหรือชัดเจนในสิ่งที่คุณแคสต์

  • ToString()สามารถoverridenตามประเภท (มันมีการควบคุมสิ่งที่มันทำ) ถ้าไม่ส่งผลในชื่อของประเภท

เห็นได้ชัดว่าถ้าวัตถุนั้นเป็นโมฆะคุณไม่สามารถเข้าถึงสมาชิกอินสแตนซ์ToString()มันจะทำให้เกิดข้อยกเว้น


-1

Convert.Tostring () ฟังก์ชันจัดการ NULL ในขณะที่. ToString () วิธีการไม่ เยี่ยมชมที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.