Sự khác biệt giữa Convert.ToString()
và là .ToString()
gì?
Tôi tìm thấy nhiều sự khác biệt trực tuyến, nhưng sự khác biệt chính là gì?
Sự khác biệt giữa Convert.ToString()
và là .ToString()
gì?
Tôi tìm thấy nhiều sự khác biệt trực tuyến, nhưng sự khác biệt chính là gì?
Câu trả lời:
Convert.ToString()
xử lý null
, trong khi ToString()
không.
null
trả về một chuỗi rỗng hoặc ném một ngoại lệ? Nó giống như sự khác biệt giữa truyền và sử dụng as
: chuyển đổi im lặng.
Gọi điện thoại ToString()
một đối tượng giả định rằng đối tượng không phải là null (vì một đối tượng cần tồn tại để gọi một phương thức cá thể trên nó). Convert.ToString(obj)
không cần phải giả định đối tượng không phải là null (vì nó là một phương thức tĩnh trên lớp Convert), nhưng thay vào đó sẽ trả về String.Empty
nếu nó là null.
Convert.ToString(string value)
trả về null
nếu đối số là null
. Convert.ToString(object value)
trả về String.Empty
nếu đối số là null
.
Ngoài các câu trả lời khác về việc xử lý null
các giá trị, hãy Convert.ToString
thử sử dụng IFormattable
và IConvertible
giao diện trước khi gọi cơ sở Object.ToString
.
Thí dụ:
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();
}
}
Kết quả:
Convert.ToString(new FormattableType()); // 0.42
new FormattableType().ToString(); // 0,42
IConvertible
được ưu tiên hơn IFormattable
, điều này sẽ được ưu tiên hơn so với Object.ToString()
việc thực hiện.
Hãy hiểu sự khác biệt thông qua ví dụ này:
int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Chúng ta có thể chuyển đổi số nguyên i
bằng cách sử dụng i.ToString ()
hoặcConvert.ToString
. Vậy sự khác biệt là gì?
Sự khác biệt cơ bản giữa chúng là Convert
hàm xử lý NULLS trong khi i.ToString ()
không; nó sẽ đưa ra một lỗi ngoại lệ tham chiếu NULL. Vì vậy, như thực hành mã hóa tốt sử dụng convert
luôn luôn an toàn.
Bạn có thể tạo một lớp và ghi đè lên toString
phương thức để làm bất cứ điều gì bạn muốn.
Ví dụ: bạn có thể tạo một lớp "MyMail" và ghi đè lêntoString
phương thức để gửi email hoặc thực hiện một số thao tác khác thay vì viết đối tượng hiện tại.
Việc Convert.toString
chuyển đổi giá trị được chỉ định thành biểu diễn chuỗi tương đương của nó.
Các phương thức "về cơ bản" giống nhau, ngoại trừ xử lý null .
Pen pen = null;
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException
Từ MSDN:
Convert.ToString Phương thức
Chuyển đổi giá trị được chỉ định thành biểu diễn chuỗi tương đương của nó.
Trả về một chuỗi đại diện cho các đối tượng hiện tại.
null
, ""
Hoặc "null"
?
Trong Convert.ToString()
, Convert xử lý một NULL
giá trị hoặc không nhưng trong .ToString()
đó không xử lý một NULL
giá trị và NULL
lỗi ngoại lệ tham chiếu. Vì vậy, nó là trong thực hành tốt để sử dụng Convert.ToString()
.
Đối với những người yêu thích Code đây là câu trả lời tốt nhất.
.............. 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)
Tôi đồng ý với câu trả lời của @ Ryan . Nhân tiện, bắt đầu với C # 6.0 cho mục đích này, bạn có thể sử dụng:
someString?.ToString() ?? string.Empty;
hoặc là
$"{someString}"; // I do not recommend this approach, although this is the most concise option.
thay vì
Convert.ToString(someString);
Convert.ToString(strName)
sẽ xử lý các giá trị null và strName.Tostring()
sẽ không xử lý giá trị null và đưa ra một ngoại lệ.
Vì vậy, tốt hơn là sử dụng Convert.ToString()
sau đó.ToString();
ToString() Vs Convert.ToString()
Điểm tương đồng :-
Cả hai đều được sử dụng để chuyển đổi một loại cụ thể thành chuỗi, ví dụ int thành chuỗi, float thành chuỗi hoặc một đối tượng thành chuỗi.
Sự khác biệt :-
ToString()
không thể xử lý null trong khi trong trường hợp với Convert.ToString()
sẽ xử lý giá trị null.
Thí dụ :
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
không xử lý Null Exception
. nó chỉ đơn giản là làm:return value == null ? string.Empty : value.ToString()
Để hiểu cả hai phương pháp, hãy lấy một ví dụ:
int i =0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Ở đây cả hai phương thức đều được sử dụng để chuyển đổi chuỗi nhưng sự khác biệt cơ bản giữa chúng là: Convert
xử lý hàm NULL
, trong khi i.ToString()
nó sẽ không ném NULL reference exception error.
như vậy vì thực hành mã hóa tốt sử dụng convert
luôn an toàn.
Hãy xem một ví dụ khác:
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)
đầu tiên thử truyền obj sang IConvertible , sau đó IFormattable để gọi ToString(...)
các phương thức tương ứng . Nếu thay vào đó, giá trị tham số được null
trả về string.Empty
. Như một phương sách cuối cùng, trở vềobj.ToString()
nếu không có gì khác làm việc.
Đáng chú ý là Convert.ToString(value)
có thể trả về null
nếu ví dụ value.ToString()
trả về null.
tôi đã viết mã này và biên dịch nó.
class Program
{
static void Main(string[] args)
{
int a = 1;
Console.WriteLine(a.ToString());
Console.WriteLine(Convert.ToString(a));
}
}
bằng cách sử dụng 'kỹ thuật đảo ngược' ( ilspy ) tôi tìm ra 'object.ToString ()' và 'Convert.ToString (obj)' thực hiện chính xác một điều. infact 'Convert.ToString (obj)' gọi 'object.ToString ()' so 'object.ToString ()' nhanh hơn.
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);
}
}
Trong C # nếu bạn khai báo một biến chuỗi và nếu bạn không gán bất kỳ giá trị nào cho biến đó, thì theo mặc định, biến đó sẽ nhận một giá trị null. Trong trường hợp như vậy, nếu bạn sử dụng phương thức ToString () thì chương trình của bạn sẽ đưa ra ngoại lệ tham chiếu null. Mặt khác, nếu bạn sử dụng phương thức Convert.ToString () thì chương trình của bạn sẽ không ném ngoại lệ.
Convert.Tostring()
về cơ bản chỉ cần gọi như sau value == null ? String.Empty: value.ToString()
(string)variable
sẽ chỉ truyền khi có một toán tử ẩn hoặc tường minh về những gì bạn đang truyền
ToString()
có thể được ghi đè theo loại (nó có quyền kiểm soát những gì nó làm), nếu không nó sẽ dẫn đến tên của loại
Rõ ràng nếu một đối tượng là null , bạn không thể truy cập thành viên thể hiện ToString()
, nó sẽ gây ra ngoại lệ
Hàm Convert.Tostring () xử lý NULL trong khi phương thức .ToString () thì không. thăm đây .