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


Ответы:


741
string myString = myInt.ToString();

4
Моя проблема в том, что вы теряете безопасность типов. Мой может быть чем угодно. Ничто здесь не говорит, взять целое число и преобразовать его в строку. 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 = new StringBuilder().Append(i).ToString();

6
также вы можете сделать это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

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

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("}");
}


14

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

int var1 = 2;

string var2 = var1.ToString();

10

В дополнение к ответу @ 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

9
string str = intVar.ToString();

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

string str = "hi " + intVar;


4

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

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

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

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

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


3
using System.ComponentModel;

TypeConverter converter = TypeDescriptor.GetConverter(typeof(int));
string s = (string)converter.ConvertTo(i, typeof(string));

Этот ответ появился в очереди проверки низкого качества, вероятно, потому что вы не объяснили код. Если вы объясните это (в своем ответе), у вас гораздо больше шансов получить больше голосов - и тот, кто спрашивает, действительно что-то узнает!
Парень со шляпой

5
@TheGuywithTheHat Вы заметите, что ни один из ответов здесь не имеет никакого объяснения кода, особенно все примеры кода в этом ответе с высоким голосом , потому что очевидно, что они все должны делать: преобразование int в строку. По правде говоря, нам ничего не нужно, кроме принятого ответа - i.ToStringвсе остальное здесь только ради полноты и веселья.
nmclean

2
Отсутствие объяснения в других ответах не означает, что во всех ответах не должно быть объяснения. Единственная причина, по которой я прокомментировал именно этот конкретный ответ, заключается в том, что я увидел его в очереди на проверку низкого качества.
Парень со шляпой

@TheGuywithTheHat Я не предполагал, что мой ответ может быть неполным, потому что другие; Я говорю, что ни один из них (включая этот), потому что намерение очевидно в контексте этого вопроса.
nmclean

2
@reggaeguitar Это в основном шутливый ответ, мы намеренно добавляли все больше и больше неясных способов выполнения одной из самых основных задач. Но, на ваш вопрос, преимущество этого метода было бы, если бы вы не знали типы заранее - вместо, typeof(int)и typeof(string)вы могли бы иметь переменные типа, и он мог бы найти и использовать соответствующий преобразователь, когда он существует.
nmclean

1
string s = "" + 2;

и вы можете делать хорошие вещи, как:

string s = 2 + 2 + "you" 

Результатом будет:

"4 ты"

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