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

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

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


person TinTin    schedule 13.05.2010    source источник
comment
Вы говорите, что у вас много различий в сети, а потом спрашиваете, только ли это по этой конкретной причине? Что еще вы нашли в сети?   -  person Ryan    schedule 14.05.2010
comment
Convert.ToString () имеет перегрузку, которая позволяет использовать CultureInfo, тогда как .ToString () не имеет такой перегрузки.   -  person Artemix    schedule 29.04.2014


Ответы (19)


Convert.ToString() обрабатывает null, а ToString() - нет.

person Ryan    schedule 13.05.2010
comment
хорошо .. Именно по этой причине используют только они. два метода? - person TinTin; 13.05.2010
comment
Кроме того, частично связанные, см. Этот ответ для более подробной информации: stackoverflow.com/questions/496096/ - person JYelton; 13.05.2010
comment
Дополнительная информация о различиях с использованием JustDecompile / Reflector: kodefuguru.com/post/2011/06/14/ - person Ubikuity; 17.02.2012
comment
Вы хотите, чтобы null возвращал пустую строку или генерировал исключение? Это похоже на разницу между приведением типов и использованием as: тихое преобразование. - person styfle; 26.09.2012
comment
@Ubikuity: ссылка не работает - person hdoghmen; 23.08.2015
comment
Вот копия из Интернет-архива сообщения в блоге, которое я упоминал: http://web.archive.org/web/20110828105257/http://www.kodefuguru.com/post/2011/06/14/Deeper-into-Convert-ToString.aspx - person Ubikuity; 24.08.2015
comment
Мне нравится, когда я читаю полный, прямой и убийственный ответ. - person Matheus Felipe; 29.10.2015
comment
Если быть более точным, он возвращает пустую строку. Думаю, это не ясно из вашего ответа. - person Dave Van den Eynde; 24.02.2020

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

person Chris    schedule 13.05.2010
comment
var arg = Request.Params.Get (__ EVENTARGUMENT); строка _arg = Convert.ToString (arg); _arg не сохраняет String.Empty, если arg имеет значение null. Зачем? - person vml19; 12.03.2012
comment
@Nilaa, возможно, вы захотите открыть другой вопрос, задав это, а не в комментарии. Мой первый вопрос: что возвращает, когда arg равен нулю? Моя первая мысль заключается в том, что arg на самом деле уже имеет тип string, поэтому вы вызываете перегрузку Convert.ToString (...), которая просто возвращает то, что вы ему передаете. Это обсуждение касается объектной перегрузки метода. - person Chris; 12.03.2012
comment
@Roshe Да, меня это только что укусило. 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
person Alexander    schedule 04.02.2014
comment
Это следует добавить к правильному ответу, потому что это довольно важная информация. - person Santhos; 14.12.2015
comment
В качестве дополнения - использование справочного источника 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 всегда безопасна.

person Swati    schedule 06.03.2012
comment
ваш пример немного недействителен, так как int никогда не может быть нулевым - person MikeT; 22.05.2018

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

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

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

person João Costa    schedule 08.02.2013
comment
Convert.ToString на самом деле безопасный метод, который проверяет значение null, и если значение не равно нулю, он просто вызывает для него метод ToString. Итак, в любом случае, если вы переопределили метод ToString, будет вызван ваш переопределенный метод ToString. - person ZafarYousafi; 25.02.2013
comment
И эта нулевая безопасность помогает только в том случае, если вы имеете дело с классами. Типы значений не могут быть нулевыми, поэтому мы можем безопасно вызывать для них метод ToString. - person ZafarYousafi; 25.02.2013

Методы "в основном" одинаковы, за исключением обработки null.

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

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

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

Object.ToString

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

person hdoghmen    schedule 23.08.2015
comment
ничего не печатает? что нет ничего? 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);
person AlexMelw    schedule 10.04.2017

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

person Ajay Saini    schedule 07.09.2011

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

    .............. 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)
person Abdul Saboor    schedule 23.08.2012
comment
Я очень доволен твоим ответом. Следовательно, +1. Спасибо. - person Ashok kumar; 17.04.2013

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

person viplov    schedule 05.01.2015

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

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

person Gaurang Dhandhukiya    schedule 12.04.2016

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.
        }
    }
}
person Johnny    schedule 19.09.2016
comment
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.
person Yogesh Patel    schedule 26.11.2018

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

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

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

person Konstantin Spirin    schedule 26.11.2018

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

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

Метод 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);
    }
}
person Senior Vector    schedule 26.11.2018

Функция Convert.Tostring () обрабатывает NULL, тогда как метод .ToString () - нет. посетите здесь.

person user632299    schedule 28.07.2019

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

person Pranaya Rout    schedule 31.10.2019

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

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

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

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

person TheGeneral    schedule 20.02.2020

Для типов, допускающих значение 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

person Kai Hartmann    schedule 26.02.2021