В чем разница между Convert.ToString()
и .ToString()
?
Я нашел много различий в Интернете, но в чем главное отличие?
В чем разница между Convert.ToString()
и .ToString()
?
Я нашел много различий в Интернете, но в чем главное отличие?
Ответы:
Convert.ToString()
ручками null
, пока ToString()
нет.
null
вернуть пустую строку или выдать исключение? Это как разница между приведением и использованием as
: тихое преобразование.
Вызов ToString()
объекта предполагает, что объект не является нулевым (поскольку объект должен существовать для вызова метода экземпляра для него). Convert.ToString(obj)
не нужно предполагать, что объект не равен нулю (так как это статический метод в классе Convert), но вместо этого вернет значение, String.Empty
если оно равно нулю.
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()
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)
Convert.ToString(strName)
будет обрабатывать нулевые значения и strName.Tostring()
не будет обрабатывать нулевые значения и выдавать исключение.
Так что лучше использовать 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()
Чтобы понять оба метода, давайте возьмем пример:
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) делают только одно. Infact '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);
}
}
В C #, если вы объявляете строковую переменную и если вы не присваиваете значение этой переменной, то по умолчанию эта переменная принимает нулевое значение. В таком случае, если вы используете метод ToString (), ваша программа сгенерирует исключение нулевой ссылки. С другой стороны, если вы используете метод Convert.ToString (), ваша программа не сгенерирует исключение.
Convert.Tostring()
в основном просто вызывает следующее value == null ? String.Empty: value.ToString()
(string)variable
только отливать , когда есть неявный или явный оператор на то , что вы литье
ToString()
может быть переопределен типом (он имеет контроль над тем, что он делает), если нет, это приводит к имени типа
Очевидно, что если объект имеет значение null , вы не можете получить доступ к члену экземпляра ToString()
, это вызовет исключение
Функция Convert.Tostring () обрабатывает NULL, а метод .ToString () - нет. посетите здесь .