Разница между Convert.ToString () и .ToString ()


158

В чем разница между Convert.ToString()и .ToString()?

Я нашел много различий в Интернете, но в чем главное отличие?


7
Вы говорите, что у вас есть много различий в Интернете, и позже вы спрашиваете, если это только по этой конкретной причине? Что еще вы нашли в Интернете?
Райан

3
Convert.ToString () имеет перегрузку, которая позволяет использовать CultureInfo, в то время как .ToString () не имеет такой перегрузки.
Артемикс

Ответы:


232

Convert.ToString()ручками null, пока ToString()нет.


3
хорошо .. по этой конкретной причине только они используют. два метода?
TinTin

Кроме того, частично связаны, см. Этот ответ для более подробной информации: stackoverflow.com/questions/496096/…
JYelton

Дополнительная информация о различиях с использованием JustDecompile / Reflector: kodefuguru.com/post/2011/06/14/…
Ubikuity

5
Вы хотите nullвернуть пустую строку или выдать исключение? Это как разница между приведением и использованием as: тихое преобразование.
Styfle

@Ubikuity: ссылка не работает
hdoghmen

64

Вызов ToString()объекта предполагает, что объект не является нулевым (поскольку объект должен существовать для вызова метода экземпляра для него). Convert.ToString(obj)не нужно предполагать, что объект не равен нулю (так как это статический метод в классе Convert), но вместо этого вернет значение, String.Emptyесли оно равно нулю.


var arg = Request.Params.Get ("__ EVENTARGUMENT"); string _arg = Convert.ToString (arg); _arg не возвращает String.Empty, когда arg равен нулю. Зачем?
vml19

2
@Nilaa, вы можете задать другой вопрос, задавая этот вопрос, а не в комментарии. Мой первый вопрос, что делает его вернуться , когда аргумент является недействительным? Сначала я подумал, что arg уже имеет тип string, поэтому вы вызываете перегрузку Convert.ToString (...), которая просто возвращает то, что вы ей передали. Это обсуждение относится к перегрузке метода объектом.
Крис Дуайер

4
@Roshe Да, мне это немного помогло. Convert.ToString(string value)возвращает, nullесли аргумент есть null. Convert.ToString(object value)возвращает, String.Emptyесли аргумент есть null.
Тим Гудман

22

В дополнение к другим ответам об обработке 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

1
К этому следует добавить правильный ответ, потому что это довольно важная информация.
Сантос

2
Так же, как дополнение - основание на справочном источнике IConvertible имеет приоритет над IFormattable, который, в свою очередь, имеет приоритет над Object.ToString()реализацией.
Grx70

11

Давайте поймем разницу через этот пример:

int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));

Мы можем преобразовать целое число, iиспользуя i.ToString ()или Convert.ToString. Так в чем же разница?

Основное различие между ними заключается в том, что Convertфункция обрабатывает NULLS, в то время i.ToString ()как нет; это выдаст ошибку исключения ссылки NULL. Так как использование хорошей практики кодирования convertвсегда безопасно.


11
Ваш

6

Вы можете создать класс и переопределить toStringметод, чтобы сделать все, что вы хотите.

Например, вы можете создать класс «MyMail» и переопределить toStringметод для отправки электронного письма или выполнить какую-либо другую операцию вместо записи текущего объекта.

Convert.toStringПреобразует указанное значение в эквивалентное ему строковое представление.


2
Convert.ToString на самом деле безопасный метод, который проверяет наличие нуля, и если значение не равно нулю, он просто вызывает метод ToString для него. Так что в любом случае, если у вас есть переопределенный метод ToString, будет вызван ваш переопределенный метод ToString.
ZafarYousafi

И эта нулевая безопасность помогает, только если вы имеете дело с классами. Типы значений не могут быть нулевыми, поэтому мы можем безопасно вызывать для них метод ToString.
ZafarYousafi

5
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's 
//better to use convert.tostring() for good coding

4

Методы «в основном» одинаковы, за исключением обработки нулевого значения .

Pen pen = null; 
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException

Из MSDN:
метод Convert.ToString

Преобразует указанное значение в его эквивалентное строковое представление.

Object.ToString

Возвращает строку, которая представляет текущий объект.


"ничего не печатает"? что ничего? null, ""Или "null"?
Уэстон

3

В Convert.ToString()Convert обрабатывает либо NULLзначение, либо нет, но в .ToString()нем не обрабатывается NULLзначение и NULLошибка исключения ссылки. Так что это хорошая практика для использования Convert.ToString().


3

Для любителей кода это лучший ответ.

    .............. 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)

1
Я очень доволен вашим ответом. Отсюда +1. Спасибо.
Ашок Кумар

3

Я согласен с ответом @ Райана . Кстати, начиная с C # 6.0 для этой цели вы можете использовать:

someString?.ToString() ?? string.Empty;

или

$"{someString}"; // I do not recommend this approach, although this is the most concise option.

вместо того

Convert.ToString(someString);

2

ToString()не может обрабатывать нулевые значения и convert.ToString()может обрабатывать значения, которые являются нулевыми, поэтому, когда вы хотите, чтобы ваша система обрабатывала нулевые значения, используйте convert.ToString().


2

Convert.ToString(strName)будет обрабатывать нулевые значения и strName.Tostring()не будет обрабатывать нулевые значения и выдавать исключение.

Так что лучше использовать Convert.ToString()потом.ToString();


2
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()
Фабио

0

Чтобы понять оба метода, давайте возьмем пример:

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.

0

Convert.ToString(value)сначала пытается привести obj к IConvertible , затем IFormattable для вызова соответствующих ToString(...)методов. Если вместо этого значение параметра было nullвозвращено string.Empty. В крайнем obj.ToString()случае вернитесь, если ничего не помогло.

Стоит отметить, что Convert.ToString(value) может вернуться, nullесли, например, value.ToString()возвращает ноль.

См. Источник справки .Net


0

я написал этот код и скомпилировал его.

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 ()' был быстрее.

Метод Object.ToString :

class System.Object
{
    public string ToString(IFormatProvider provider)
    {
        return Number.FormatInt32(this, null, NumberFormatInfo.GetInstance(provider));
    }
}

Метод Conver.ToString :

class System.Convert
{
    public static string ToString(object value)
    {
        return value.ToString(CultureInfo.CurrentCulture);
    }
}

0

В C #, если вы объявляете строковую переменную и если вы не присваиваете значение этой переменной, то по умолчанию эта переменная принимает нулевое значение. В таком случае, если вы используете метод ToString (), ваша программа сгенерирует исключение нулевой ссылки. С другой стороны, если вы используете метод Convert.ToString (), ваша программа не сгенерирует исключение.


0
  • Convert.Tostring() в основном просто вызывает следующее value == null ? String.Empty: value.ToString()

  • (string)variableтолько отливать , когда есть неявный или явный оператор на то , что вы литье

  • ToString()может быть переопределен типом (он имеет контроль над тем, что он делает), если нет, это приводит к имени типа

Очевидно, что если объект имеет значение null , вы не можете получить доступ к члену экземпляра ToString(), это вызовет исключение


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.