Перетворити 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 () робить непотрібний бокс інту, але, можливо, це оптимізовано в будь-якому випадку.
Стівен Холт

43
.ToString()є найбільш ефективним способом перетворення. Усі інші методи, представлені тут, з часом .ToString()все-таки зателефонують .
Xavier Poinas

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.