В чем разница между Convert.ToString()
и .ToString()
?
Я нашел много различий в Интернете, но в чем главное отличие?
В чем разница между Convert.ToString()
и .ToString()
?
Я нашел много различий в Интернете, но в чем главное отличие?
Convert.ToString()
обрабатывает null
, а ToString()
- нет.
null
возвращал пустую строку или генерировал исключение? Это похоже на разницу между приведением типов и использованием as
: тихое преобразование.
- person styfle; 26.09.2012
Вызов ToString()
для объекта предполагает, что объект не является нулевым (поскольку объект должен существовать, чтобы вызвать на нем метод экземпляра). Convert.ToString(obj)
не обязательно предполагать, что объект не является нулевым (поскольку это статический метод класса Convert), но вместо этого будет возвращать String.Empty
, если он имеет значение NULL.
Convert.ToString(string value)
возвращает null
, если аргумент null
. Convert.ToString(object value)
возвращает String.Empty
, если аргумент null
.
- person Tim Goodman; 29.08.2013
В дополнение к другим ответам об обработке значений null
, Convert.ToString
пытается использовать интерфейсы IFormattable
и IConvertible
перед вызовом base 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()
.
- person Grx70; 24.11.2018
Давайте поймем разницу на этом примере:
int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Мы можем преобразовать целое число i
, используя i.ToString ()
или Convert.ToString
. Так в чем разница?
Основное различие между ними в том, что функция Convert
обрабатывает NULL, а i.ToString ()
- нет; это вызовет ошибку исключения ссылки NULL. Так что хорошая практика кодирования с использованием convert
всегда безопасна.
Вы можете создать класс и переопределить метод toString
, чтобы делать все, что захотите.
Например, вы можете создать класс "MyMail" и переопределить метод toString
для отправки электронного письма или выполнения какой-либо другой операции вместо записи текущего объекта.
Convert.toString
преобразует указанное значение в его эквивалентное строковое представление.
Методы "в основном" одинаковы, за исключением обработки null.
Pen pen = null;
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException
Из MSDN:
Метод Convert.ToString
Преобразует указанное значение в эквивалентное строковое представление.
Возвращает строку, которая представляет текущий объект.
null
, ""
или "null"
?
- person weston; 15.12.2015
Я согласен с ответом @ Райана. Кстати, начиная с C # 6.0 для этой цели можно использовать:
someString?.ToString() ?? string.Empty;
or
$"{someString}"; // I do not recommend this approach, although this is the most concise option.
вместо
Convert.ToString(someString);
В Convert.ToString()
Convert обрабатывает либо значение 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)
ToString()
не может обрабатывать нулевые значения, а convert.ToString()
может обрабатывать нулевые значения, поэтому, если вы хотите, чтобы ваша система обрабатывала нулевые значения, используйте convert.ToString()
.
Convert.ToString(strName)
будет обрабатывать значения, допускающие значение NULL, а strName.Tostring()
не будет обрабатывать значение NULL и генерировать исключение.
Так что лучше использовать Convert.ToString()
, затем .ToString();
ToString() Vs Convert.ToString()
Сходства: -
Оба используются для преобразования определенного типа в строку, т.е. int в строку, float в строку или объект в строку.
Разница :-
ToString()
не может обрабатывать нулевое значение, тогда как в случае с 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()
- person Fabio; 10.01.2017
Чтобы понять оба метода, давайте рассмотрим пример:
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.
я написал этот код и скомпилировал его.
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 ()' работает быстрее.
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 () - нет. посетите здесь.
В C #, если вы объявляете строковую переменную и не присваиваете ей никакого значения, то по умолчанию эта переменная принимает нулевое значение. В таком случае, если вы используете метод ToString (), ваша программа выдаст исключение с нулевой ссылкой. С другой стороны, если вы используете метод Convert.ToString (), ваша программа не будет генерировать исключение.
Convert.Tostring()
в основном просто вызывает следующие value == null ? String.Empty: value.ToString()
(string)variable
будет преобразовывать только в том случае, если есть неявный или явный оператор для того, что вы преобразовываете.
ToString()
может быть переопределено по типу (он контролирует то, что он делает), в противном случае это приводит к названию типа
Очевидно, что если объект имеет значение null, вы не можете получить доступ к члену экземпляра ToString()
, это вызовет исключение
Для типов, допускающих значение NULL, ToString()
фактически обрабатывает null
значения:
int? i = null;
var s1 = i.ToString(); // returns ""
var s2 = Convert.ToString(i); // returns ""
Просто чтобы исправить существующие ответы.
Источник:
https://docs.microsoft.com/en-us/dotnet/api/system.nullable-1.tostring?view=net-5.0