У чому різниця між Convert.ToString()
і .ToString()
?
Я знайшов багато відмінностей в Інтернеті, але яка головна різниця?
У чому різниця між Convert.ToString()
і .ToString()
?
Я знайшов багато відмінностей в Інтернеті, але яка головна різниця?
Відповіді:
Convert.ToString()
ручки null
, поки ToString()
ні.
null
повернути порожній рядок або викинути виняток? Це схоже на різницю між кастингом та використанням as
: мовчазне перетворення.
Виклик ToString()
об'єкта передбачає, що об'єкт не є нульовим (оскільки для виклику методу екземпляра на ньому потрібно існувати об'єкт). Convert.ToString(obj)
не потрібно вважати, що об'єкт не є null (так як це статичний метод для класу Convert), але натомість повернеться, String.Empty
якщо він є null.
Convert.ToString(string value)
повертається, null
якщо аргумент є null
. Convert.ToString(object value)
повертається, String.Empty
якщо аргумент є null
.
На додаток до інших відповідей щодо обробки null
значень, Convert.ToString
намагається використовувати IFormattable
та IConvertible
інтерфейси перед викликом бази Object.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
IConvertible
має перевагу над тим IFormattable
, що, в свою чергу, має перевагу над Object.ToString()
реалізацією.
Розберемо різницю на цьому прикладі:
int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Ми можемо конвертувати ціле число i
за допомогою i.ToString ()
або Convert.ToString
. То яка різниця?
Основна відмінність між ними - Convert
функція обробляє NULLS, а її i.ToString ()
немає; це призведе до помилки виключення посилання NULL. Так як хороша практика кодування convert
завжди безпечна.
Ви можете створити клас і замінити toString
метод, щоб зробити все, що завгодно.
Наприклад - ви можете створити клас "MyMail" і замінити toString
метод надсилання електронної пошти або зробити якусь іншу операцію замість написання поточного об'єкта.
Convert.toString
Перетворює вказане значення в еквівалентну йому строкове представлення.
Методи "в основному" однакові, за винятком обробки нуля .
Pen pen = null;
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException
Від MSDN:
Convert.ToString метод
Перетворює вказане значення в його еквівалентне подання рядків.
Повертає рядок, що представляє поточний об'єкт.
null
, ""
або "null"
?
В Convert.ToString()
, конвертувати обробляє або NULL
значення, або ні, але в .ToString()
ньому не обробляється NULL
значення та NULL
помилка виключення посилань. Так що це в належній практиці використовувати Convert.ToString()
.
Для любителів Кодексу це найкраща відповідь.
.............. 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)
буде обробляти нульові значення та strName.Tostring()
не оброблятиме нульове значення та кидатиме виняток.
Так що краще використовувати Convert.ToString()
тоді.ToString();
ToString() Vs Convert.ToString()
Подібність: -
Обидва використовуються для перетворення конкретного типу в рядок, тобто int в рядок, float в string або об'єкт в string.
Різниця: -
ToString()
не може обробити null, якщо у випадку з Convert.ToString()
буде обробляти нульове значення.
Приклад:
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
не впорайтеся Null Exception
. це просто зробити:return value == null ? string.Empty : value.ToString()
Для розуміння обох методів візьмемо приклад:
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.
Convert.ToString(value)
спочатку намагається закинути obj на IConvertible , потім IFormattable, щоб викликати відповідні ToString(...)
методи. Якщо замість цього значення значення було null
повернути string.Empty
. В крайньому випадку повертайтеся, obj.ToString()
якщо нічого іншого не вийшло.
Варто зазначити, що Convert.ToString(value)
може повернутися, null
якщо, наприклад, value.ToString()
поверне null.
Дивіться .Net довідкове джерело
Я написав цей код і скомпілював його.
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 ()' so 'object.ToString ()' швидше.
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 #, якщо ви оголошуєте змінну рядка, і якщо ви не присвоюєте їй ніякого значення, то за замовчуванням ця змінна приймає нульове значення. У такому випадку, якщо ви використовуєте метод ToString (), ваша програма викине нульове посилання виключення. З іншого боку, якщо ви використовуєте метод Convert.ToString (), ваша програма не викине виключення.
Convert.Tostring()
в основному просто називає наступне value == null ? String.Empty: value.ToString()
(string)variable
передаватиметься лише тоді, коли є неявний або явний оператор щодо того, що ви передаваєте
ToString()
може бути відмінено типом (він має контроль над тим, що він робить), якщо ні, це призводить до імені типу
Очевидно, що якщо об’єкт недійсний , ви не можете отримати доступ до члена екземпляра ToString()
, це спричинить виняток
Функція Convert.Tostring () обробляє NULL, тоді як метод .ToString () не робить. завітайте сюди .