Моя проблема в том, что вы теряете безопасность типов. Мой может быть чем угодно. Ничто здесь не говорит, взять целое число и преобразовать его в строку. myInt может быть объектом, и объект не может быть преобразован в строку. Это известно во время компиляции, но это даже не вызовет исключение времени выполнения, а только допустит некорректные данные.
Тимоти Гонсалес
3
@TimothyGonzalez Это крайний случай, если вы вызываете .ToString () обычно потому, что вам нужно, чтобы он был строкой и мог быть строкой.
EpicKip
35
@nfgallimore Это не правильный крайний случай, это даже не крайний случай в этой ситуации. ОП заявил, что у него есть тип int, который он хотел преобразовать в строку. Если это тип int, то простым и простым значением является int. Компилятор гарантирует, что это так. Даже не уверен, как вы пошли на эту касательную. ОП не спрашивал, как убедиться, что случайная ссылка была целым числом, а затем преобразовать ее в строку. Возможно, в этом случае у вас есть точка, но это не так.
AaronM
1
Это решение выдает исключение для nullзначений.
Мехди Дехани
18
Комментарии к этому ответу смешны.
524
string s = i.ToString();string s =Convert.ToString(i);string s =string.Format("{0}", i);string s = $"{i}";string s =""+ i;string s =string.Empty+ i;string s =newStringBuilder().Append(i).ToString();
также вы можете сделать этоstring count = "" + intCount;
Дион Дирза
2
Все ли эти решения одинаково эффективны? Я полагаю, что i.ToString () делает ненужную упаковку int, но, возможно, это оптимизировано в любом случае.
Стивен Холт
43
.ToString()это самый эффективный способ сделать преобразование. Все остальные методы, представленные здесь, в конечном итоге будут вызываться .ToString().
Ксавье Пуан
6
Я немного обеспокоен тем фактом, что вы продолжаете повторно объявлять переменнуюs
thecoshman
1
@XavierPoinas Хотя они могут вызывать «ToString ()» - это в некоторой степени зависит от того, что вы планируете с ним делать, и какой из них наиболее эффективен. string s = "xyz" + i;создаст новую строку "xyz" - создайте новую строку, содержащую ваше целое число; а затем создайте 3-ю строку, содержащую 2 конкатенацию. string.Format("xyz{0}", i);с другой стороны, способен генерировать только 2 строки - так как он объединяет их в строку. Это исполнение становится более заметным, поскольку строки становятся длиннее.
UKMonkey
32
На всякий случай, если вам нужно двоичное представление, и вы все еще пьяны с вечеринки прошлых ночей:
privatestaticstringByteToString(intvalue){StringBuilder builder =newStringBuilder(sizeof(byte)*8);BitArray[] bitArrays =BitConverter.GetBytes(value).Reverse().Select(b =>newBitArray(new[]{b})).ToArray();foreach(bool bit in bitArrays.SelectMany(bitArray => bitArray.Cast<bool>().Reverse())){
builder.Append(bit ?'1':'0');}return builder.ToString();}
Примечание: кое-что о не очень хорошей обработке порядка байтов ...
Редактировать: Если вы не возражаете пожертвовать небольшим количеством памяти для скорости, вы можете использовать ниже для генерации массива с предварительно вычисленными значениями строки:
staticvoidOutputIntegerStringRepresentations(){Console.WriteLine("private static string[] integerAsDecimal = new [] {");for(int i =int.MinValue; i <int.MaxValue; i++){Console.WriteLine("\t\"{0}\",", i);}Console.WriteLine("\t\"{0}\"",int.MaxValue);Console.WriteLine("}");}
Ни в одном из ответов не упоминалось, что ToString()метод можно применять к целочисленным выражениям
Debug.Assert((1000*1000).ToString()=="1000000");
даже целочисленные литералы
Debug.Assert(256.ToString("X")=="100");
Хотя целочисленные литералы, подобные этому, часто считают плохим стилем кодирования ( магические числа ), могут быть случаи, когда эта функция полезна ...
Этот ответ появился в очереди проверки низкого качества, вероятно, потому что вы не объяснили код. Если вы объясните это (в своем ответе), у вас гораздо больше шансов получить больше голосов - и тот, кто спрашивает, действительно что-то узнает!
Парень со шляпой
5
@TheGuywithTheHat Вы заметите, что ни один из ответов здесь не имеет никакого объяснения кода, особенно все примеры кода в этом ответе с высоким голосом , потому что очевидно, что они все должны делать: преобразование int в строку. По правде говоря, нам ничего не нужно, кроме принятого ответа - i.ToStringвсе остальное здесь только ради полноты и веселья.
nmclean
2
Отсутствие объяснения в других ответах не означает, что во всех ответах не должно быть объяснения. Единственная причина, по которой я прокомментировал именно этот конкретный ответ, заключается в том, что я увидел его в очереди на проверку низкого качества.
Парень со шляпой
@TheGuywithTheHat Я не предполагал, что мой ответ может быть неполным, потому что другие; Я говорю, что ни один из них (включая этот), потому что намерение очевидно в контексте этого вопроса.
nmclean
2
@reggaeguitar Это в основном шутливый ответ, мы намеренно добавляли все больше и больше неясных способов выполнения одной из самых основных задач. Но, на ваш вопрос, преимущество этого метода было бы, если бы вы не знали типы заранее - вместо, typeof(int)и typeof(string)вы могли бы иметь переменные типа, и он мог бы найти и использовать соответствующий преобразователь, когда он существует.
null
значений.источник
string count = "" + intCount;
.ToString()
это самый эффективный способ сделать преобразование. Все остальные методы, представленные здесь, в конечном итоге будут вызываться.ToString()
.s
string s = "xyz" + i;
создаст новую строку "xyz" - создайте новую строку, содержащую ваше целое число; а затем создайте 3-ю строку, содержащую 2 конкатенацию.string.Format("xyz{0}", i);
с другой стороны, способен генерировать только 2 строки - так как он объединяет их в строку. Это исполнение становится более заметным, поскольку строки становятся длиннее.На всякий случай, если вам нужно двоичное представление, и вы все еще пьяны с вечеринки прошлых ночей:
Примечание: кое-что о не очень хорошей обработке порядка байтов ...
Редактировать: Если вы не возражаете пожертвовать небольшим количеством памяти для скорости, вы можете использовать ниже для генерации массива с предварительно вычисленными значениями строки:
источник
источник
Предполагается, что метод ToString любого объекта возвращает строковое представление этого объекта.
источник
В дополнение к ответу @ Xavier, вот страница, которая делает сравнение скорости между несколькими различными способами сделать преобразование от 100 итераций до 21 474 836 итераций.
Кажется, в значительной степени связь между:
источник
В некоторых условиях вы не должны использовать
ToString()
источник
или:
источник
Ни в одном из ответов не упоминалось, что
ToString()
метод можно применять к целочисленным выражениямдаже целочисленные литералы
Хотя целочисленные литералы, подобные этому, часто считают плохим стилем кодирования ( магические числа ), могут быть случаи, когда эта функция полезна ...
источник
источник
i.ToString
все остальное здесь только ради полноты и веселья.typeof(int)
иtypeof(string)
вы могли бы иметь переменные типа, и он мог бы найти и использовать соответствующий преобразователь, когда он существует.и вы можете делать хорошие вещи, как:
Результатом будет:
источник