แปลง int เป็นสตริงหรือไม่


คำตอบ:


741
string myString = myInt.ToString();

4
ปัญหาของฉันคือคุณสูญเสียความปลอดภัยประเภท myInt อาจเป็นอะไรก็ได้ ที่นี่ไม่มีอะไรบอกว่าใช้จำนวนเต็มและแปลงเป็นสตริง myInt อาจเป็นวัตถุและวัตถุไม่สามารถแปลงเป็นสตริงได้ ที่รู้จักกันในเวลารวบรวม แต่จะไม่ได้เพิ่มข้อยกเว้นรันไทม์มันก็จะให้ข้อมูลที่ไม่ดี
Timothy Gonzalez

3
@ TimothyGonzalez นั่นเป็นกรณีที่ขอบถ้าคุณเรียกว่า ToString () มันมักจะเป็นเพราะคุณต้องการให้มันเป็นสตริงและมันอาจจะเป็นสตริง
EpicKip

35
@nfgallimore มันไม่ใช่กรณีขอบที่ถูกต้องมันไม่ได้เป็นกรณีขอบในสถานการณ์นี้ OP ระบุว่าเขามีประเภท int ที่เขาต้องการแปลงเป็นสตริง ถ้าเป็นชนิด int ค่าธรรมดาและแบบง่ายจะเป็นค่า int คอมไพเลอร์จะประกันว่าเป็นกรณี ไม่แน่ใจด้วยซ้ำว่าคุณไปเที่ยวที่ใดด้วยการสัมผัสกัน OP ไม่ได้ถามถึงวิธีการตรวจสอบให้แน่ใจว่าการอ้างอิงแบบสุ่มเป็นจำนวนเต็มแล้วแปลงเป็นสตริง บางทีในกรณีนี้คุณมีประเด็น แต่นั่นไม่ใช่กรณี
AaronM

1
วิธีนี้จะทำให้เกิดข้อยกเว้นสำหรับnullค่า
Mehdi Dehghani

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;
Dion Dirza

2
โซลูชั่นเหล่านี้มีประสิทธิภาพเท่าเทียมกันหรือไม่? ฉันคิดว่า i.ToString () ทำมวยที่ไม่จำเป็นของ int แต่อาจเป็นการปรับให้เหมาะสม
Stephen Holt

43
.ToString()เป็นวิธีที่มีประสิทธิภาพที่สุดในการทำ Conversion ทุกวิธีการอื่น ๆ ที่นำเสนอนี้ในที่สุดจะเรียก.ToString()อยู่แล้ว
Xavier Poinas

6
ฉันรู้สึกไม่มั่นคงเล็กน้อยจากความจริงที่ว่าคุณประกาศตัวแปรอีกครั้งs
thecoshman

1
@ XavierPoinas ในขณะที่พวกเขาอาจเรียกว่า "ToString ()" - มันค่อนข้างขึ้นอยู่กับสิ่งที่คุณวางแผนที่จะทำกับมันซึ่งเป็นที่มีประสิทธิภาพมากที่สุด string s = "xyz" + i;จะสร้างสตริง "xyz" ใหม่ - สร้างสตริงใหม่ที่มีจำนวนเต็มของคุณ และสร้างสตริงที่ 3 ที่ประกอบด้วย 2 concated 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();
}

หมายเหตุ: บางสิ่งบางอย่างเกี่ยวกับการไม่จัดการกับ endianness อย่างมาก ...

แก้ไข: หากคุณไม่สนใจที่จะเสียสละหน่วยความจำเพียงเล็กน้อยเพื่อความเร็วคุณสามารถใช้ด้านล่างเพื่อสร้างอาร์เรย์ที่มีค่าสตริงที่คำนวณไว้ล่วงหน้า:

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



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));

คำตอบนี้ปรากฏในคิวตรวจสอบคุณภาพต่ำเนื่องจากคุณไม่ได้อธิบายรหัส หากคุณอธิบายมัน (ในคำตอบของคุณ) คุณมีแนวโน้มที่จะได้รับการโหวตมากขึ้น - และผู้ถามก็เรียนรู้บางสิ่ง!
The Guy with The Hat

5
@TheGuywithTheHat คุณจะสังเกตเห็นว่าไม่มีคำตอบใด ๆ ที่นี่มีคำอธิบายใด ๆ ของรหัสโดยเฉพาะตัวอย่างโค้ดทั้งหมดในคำตอบที่ได้รับการโหวตสูงเพราะเห็นได้ชัดว่าพวกเขาทั้งหมดต้องทำอะไร: แปลง int เป็นสตริง ความจริงแล้วเราไม่ต้องการอะไรเลยนอกจากคำตอบที่ได้รับการยอมรับi.ToString- ส่วนที่เหลืออยู่ที่นี่เพื่อความสมบูรณ์และความสนุกสนานเท่านั้น
nmclean

2
การขาดคำอธิบายในคำตอบอื่น ๆ ไม่ได้หมายความว่าคำตอบทั้งหมดควรไม่มีคำอธิบาย เหตุผลเดียวที่ฉันแสดงความคิดเห็นต่อคำตอบเฉพาะนี้เพราะฉันเห็นในคิวการตรวจสอบคุณภาพต่ำ
ผู้ชายกับหมวก

@TheGuywithTheHat ฉันไม่ได้บอกว่าคำตอบของฉันอาจไม่สมบูรณ์เพราะคนอื่นเป็น; ฉันกำลังบอกว่าไม่มีของพวกเขา (รวมถึงนี้) เพราะความตั้งใจที่ชัดเจนในบริบทของคำถามนี้
nmclean

2
@reggaeguitar เป็นคำตอบที่ตลกส่วนใหญ่เราตั้งใจเพิ่มวิธีที่คลุมเครือมากขึ้นในการทำหนึ่งในภารกิจพื้นฐานที่สุด แต่สำหรับคำถามของคุณข้อดีของวิธีนี้คือถ้าคุณไม่ทราบประเภทล่วงหน้า - แทนที่จะเป็นtypeof(int)และtypeof(string)คุณสามารถมีตัวแปร Type และจะค้นหาและใช้ตัวแปลงที่เหมาะสมทุกครั้งที่มีอยู่
nmclean

1
string s = "" + 2;

และคุณสามารถทำสิ่งที่ดีเช่น:

string s = 2 + 2 + "you" 

ผลลัพธ์จะเป็น:

"4 คุณ"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.