Преобразовать int в строку?

Как я могу преобразовать тип данных int в тип данных string в C #?


person The Worst Shady    schedule 21.06.2010    source источник


Ответы (9)


На всякий случай, если вам нужно двоичное представление, а вы все еще пьяны после вечеринки прошлой ночью:

private static string ByteToString(int value)
{
    StringBuilder builder = new StringBuilder(sizeof(byte) * 8);
    BitArray[] bitArrays = BitConverter.GetBytes(value).Reverse().Select(b => new BitArray(new []{b})).ToArray();
    foreach (bool bit in bitArrays.SelectMany(bitArray => bitArray.Cast<bool>().Reverse()))
    {
        builder.Append(bit ? '1' : '0');
    }
    return builder.ToString();
}

Примечание: кое-что о не очень хорошей обработке байтов ...


Если вы не против пожертвовать немного памяти ради скорости, вы можете использовать нижеприведенный пример для создания массива с предварительно рассчитанными строковыми значениями:

static void OutputIntegerStringRepresentations()
{
    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("}");
}
person Onots    schedule 26.12.2014

Предполагается, что метод ToString любого объекта должен возвращать строковое представление этого объекта.

int var1 = 2;

string var2 = var1.ToString();
person VoodooChild    schedule 21.06.2010

В дополнение к ответу @Xavier, вот страница, на которой выполняется сравнение скорости между несколькими различными способами преобразования: от 100 до 21 474 836 итераций.

Это похоже на связь между:

int someInt = 0;
someInt.ToString(); //this was fastest half the time
//and
Convert.ToString(someInt); //this was the fastest the other half the time
person Community    schedule 06.09.2014

string str = intVar.ToString();

В некоторых случаях вам не нужно использовать ToString()

string str = "hi " + intVar;
person Mehmet Ince    schedule 25.05.2013

Ни в одном из ответов не упоминалось, что ToString() метод можно применять к целочисленным выражениям

Debug.Assert((1000*1000).ToString()=="1000000");

даже до целочисленных литералов

Debug.Assert(256.ToString("X")=="100");

Хотя такие целочисленные литералы часто считаются плохим стилем кодирования (магические числа), могут быть случаи, когда эта функция будет полезна ...

person Wolf    schedule 21.12.2016

string s = "" + 2;

и вы можете делать такие приятные вещи, как:

string s = 2 + 2 + "you" 

В результате получится:

"4 ты"

person Gilad F    schedule 16.05.2018

person    schedule
comment
Моя проблема в том, что вы теряете безопасность типов. myInt может быть чем угодно. Здесь ничего не говорится о том, чтобы преобразовать целое число в строку. myInt может быть объектом, а объект не может быть преобразован в строку. Это известно во время компиляции, но это даже не вызовет исключения во время выполнения, а просто разрешит неверные данные. - person Timothy Gonzalez; 15.12.2016
comment
@TimothyGonzalez Это крайний случай, если вы вызываете .ToString () обычно потому, что вам нужно, чтобы это была строка, и это может быть строка. - person EpicKip; 15.02.2017
comment
@EpicKip Это действительный крайний случай. - person Nick Gallimore; 21.06.2018
comment
@nfgallimore Это недопустимый граничный случай, это даже не граничный случай в этой ситуации. OP заявил, что у него есть тип int, который он хочет преобразовать в строку. Если это тип int, то простым и понятным значением будет int. Компилятор позаботится об этом. Даже не знаю, как вы пошли по этой прямой. OP не спрашивал, как убедиться, что случайная ссылка была целым числом, а затем преобразовать его в строку. Возможно, в этом случае вы правы, но это не так. - person AaronM; 23.06.2018
comment
Это решение вызывает исключение для значений null. - person Mehdi Dehghani; 30.11.2018
comment
@MehdiDehghani, тип данных int из вопроса не будет нулевым. Но в качестве аргумента тип данных int? может иметь значение null, но это вернет пустую строку, а не throw. Однако, если тип данных не будет int, а вместо этого будет int?, помещенный в object, тогда да, он выдаст значение null. - person Anthony Pegram; 01.12.2018
comment
intValue.ToString () подходит для 99,34% случаев. Если возможен один из редких крайних случаев, запишите его. Если это результат вызова метода, который явно устанавливает его (и вы знаете, что пользователь не может им манипулировать), тогда его можно использовать. - person Jon; 21.12.2018
comment
Комментарии к этому ответу смешны. - person ; 22.03.2019
comment
Кстати, вы можете установить формат, если вам нужно. - person 劉鎮瑲; 27.12.2019
comment
На всякий случай, если кто-то столкнется с той же проблемой, что и я, убедитесь, что вы не забыли заглавную T в ToString(). - person zcoop98; 14.10.2020

person    schedule
comment
также вы можете сделать это string count = "" + intCount; - person Dion Dirza; 10.06.2013
comment
Все ли эти решения одинаково эффективны? Я бы предположил, что i.ToString () выполняет ненужную упаковку int, но, возможно, это все равно оптимизировано. - person Stephen Holt; 23.09.2013
comment
.ToString() - наиболее эффективный способ преобразования. Все остальные методы, представленные здесь, в конечном итоге все равно вызовут .ToString(). - person Xavier Poinas; 24.09.2013
comment
Меня немного смущает тот факт, что вы продолжаете повторно объявлять переменную s - person thecoshman; 11.06.2018

person    schedule
comment
Этот ответ оказался в очереди на проверку низкого качества, предположительно из-за того, что вы не объяснили код. Если вы все же объясните это (в своем ответе), у вас гораздо больше шансов получить больше голосов - и спрашивающий действительно что-то узнает! - person The Guy with The Hat; 10.09.2014
comment
@TheGuywithTheHat Вы заметите, что ни один из ответов здесь не содержит объяснения кода, особенно всех примеров кода в этом ответе, получившем большое количество голосов., потому что очевидно, что все они должны делать: преобразовывать int в строку. По правде говоря, нам не нужно ничего, кроме принятого ответа - i.ToString - остальное здесь только для полноты и удовольствия. - person nmclean; 10.09.2014
comment
В чем преимущество этого способа? Он использует непонятные классы и просто усложняет его без всякой пользы. - person reggaeguitar; 23.05.2019
comment
@reggaeguitar Это в основном шутливый ответ, мы специально добавляли все больше и больше непонятных способов выполнения одной из самых простых задач. Но на ваш вопрос, преимущество этого метода было бы, если бы вы не знали типы заранее - вместо typeof(int) и typeof(string) у вас могут быть переменные типа, и он будет находить и использовать соответствующий преобразователь всякий раз, когда он существует. - person nmclean; 23.05.2019