В чем разница между Convert.ToString()
и .ToString()
?
Я нашел много различий в Интернете, но какая главная разница?
В чем разница между Convert.ToString()
и .ToString()
?
Я нашел много различий в Интернете, но какая главная разница?
Convert.ToString()
обрабатывает null
, а ToString()
- нет.
Вызов ToString()
объекта предполагает, что объект не является нулевым (поскольку объект должен существовать для вызова метода экземпляра на нем). Convert.ToString(obj)
не нужно предполагать, что объект не является нулевым (поскольку он является статическим методом в классе Convert), но вместо этого возвращает 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
Давайте рассмотрим разницу в этом примере:
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
преобразует указанное значение в его эквивалентное строковое представление.
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
//better to use convert.tostring() for good coding
Методы "в основном" одинаковы, кроме обработки null.
Pen pen = null;
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException
От MSDN:
Метод Convert.ToString
Преобразует указанное значение в его эквивалентное строковое представление.
Возвращает строку, представляющую текущий объект.
В Convert.ToString()
Convert обрабатывает значение a 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)
Я согласен с @Райаном ответом. Кстати, начиная с С# 6.0 для этой цели вы можете использовать:
someString?.ToString() ?? string.Empty;
или
$"{someString}"; // I do not recommend this approach, although this is the most concise option.
вместо
Convert.ToString(someString);
ToString()
не может обрабатывать нулевые значения, а convert.ToString()
может обрабатывать значения, которые являются нулевыми, поэтому, когда вы хотите, чтобы ваша система обрабатывала нулевое значение, используйте convert.ToString()
.
Convert.ToString(strName)
будет обрабатывать нулевые значения, а strName.Tostring()
не будет обрабатывать значение NULL и вызывать исключение.
Итак, лучше использовать Convert.ToString()
, затем .ToString();
ToString() Vs Convert.ToString()
Сходства: -
Оба используются для преобразования определенного типа в строку i.e int в строку, float в строку или объект в строку.
Разница: -
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.
}
}
}
Чтобы понять оба метода, давайте возьмем пример:
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()
вернет ноль.
я написал этот код и скомпилировал его.
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) делают только одно. на самом деле 'Convert.ToString(obj)' вызывает 'object.ToString()', поэтому '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);
}
}
Функция Convert.Tostring() обрабатывает NULL, а метод .ToString() - нет. посетите здесь.