Chuyển đổi int thành chuỗi?


499

Làm cách nào tôi có thể chuyển đổi một intkiểu dữ liệu thành stringkiểu dữ liệu trong C #?

Câu trả lời:


741
string myString = myInt.ToString();

4
Vấn đề của tôi với điều này là bạn mất an toàn loại. myInt có thể là bất cứ điều gì. Không có gì ở đây nói lấy một số nguyên và chuyển đổi nó thành một chuỗi. myInt có thể là một đối tượng và một đối tượng không thể được chuyển đổi thành một chuỗi. Điều đó được biết đến vào thời gian biên dịch, nhưng nó thậm chí sẽ không đưa ra một ngoại lệ thời gian chạy, nó sẽ chỉ cho phép dữ liệu xấu.
Timothy Gonzalez

3
@TimothyGonzalez Đó là trường hợp cạnh, nếu bạn gọi .ToString () thường là vì bạn cần nó là một chuỗi và nó có thể là một chuỗi.
EpicKip

35
@nfgall Morph Đây không phải là trường hợp cạnh hợp lệ, nó thậm chí không phải là trường hợp cạnh trong tình huống này. OP cho biết anh ta có một kiểu int mà anh ta muốn chuyển đổi thành một chuỗi. Nếu nó là một kiểu int, thì đơn giản và giá trị là một int. Trình biên dịch sẽ đảm bảo đó là trường hợp. Thậm chí không chắc chắn làm thế nào bạn đi trên tiếp tuyến đó. OP đã không hỏi làm thế nào để đảm bảo một tham chiếu ngẫu nhiên là một số nguyên và sau đó chuyển đổi nó thành một chuỗi. Có lẽ trong trường hợp đó bạn có một điểm, nhưng đó không phải là trường hợp.
AaronM

1
Giải pháp này ném ngoại lệ cho nullcác giá trị.
Mehdi Dehghani

18
Các ý kiến ​​về câu trả lời này là vô lý.

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
bạn cũng có thể làm điều nàystring count = "" + intCount;
Dion Dirza

2
Có phải tất cả các giải pháp đều hiệu quả như nhau? Tôi tưởng tượng i.ToString () thực hiện một số quyền anh không cần thiết của int, nhưng có lẽ điều đó vẫn được tối ưu hóa.
Stephen Holt

43
.ToString()là cách hiệu quả nhất để thực hiện chuyển đổi. Tất cả các phương pháp khác được trình bày ở đây cuối cùng sẽ gọi .ToString().
Xavier Poinas

6
Tôi cảm thấy hơi bất ổn vì thực tế là bạn tiếp tục khai báo lại biếns
thecoshman

1
@XavierPoinas Trong khi họ có thể gọi "ToString ()" - điều đó phần nào phụ thuộc vào những gì bạn dự định làm với nó như là cách hiệu quả nhất. string s = "xyz" + i;sẽ tạo một chuỗi "xyz" mới - tạo chuỗi mới chứa số nguyên của bạn; và sau đó tạo một chuỗi thứ 3 chứa 2 liên kết. string.Format("xyz{0}", i);mặt khác, có thể tạo ra chỉ 2 chuỗi - vì nó che giấu chúng theo dòng. Hiệu suất này trở nên đáng chú ý hơn khi các chuỗi dài hơn.
UKMonkey

32

Chỉ trong trường hợp bạn muốn đại diện nhị phân và bạn vẫn say từ bữa tiệc đêm qua:

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

Lưu ý: Một cái gì đó về việc không xử lý endianness rất độc đáo ...

Chỉnh sửa: Nếu bạn không hy sinh một chút bộ nhớ cho tốc độ, bạn có thể sử dụng bên dưới để tạo một mảng với các giá trị chuỗi được tính toán trước:

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

Phương thức ToString của bất kỳ đối tượng nào được cho là trả về một chuỗi đại diện của đối tượng đó.

int var1 = 2;

string var2 = var1.ToString();

10

Hơn nữa về phản hồi của @ Xavier, đây là một trang so sánh tốc độ giữa một số cách khác nhau để thực hiện chuyển đổi từ 100 lần lặp lên đến 21.474.836 lần lặp.

Có vẻ như khá nhiều ràng buộc giữa:

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

Trong một số điều kiện, yo không phải sử dụng ToString()

string str = "hi " + intVar;


4

Không có câu trả lời nào đề cập rằng ToString()phương thức này có thể được áp dụng cho các biểu thức nguyên

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

thậm chí đến số nguyên

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

Mặc dù những chữ nguyên như thế này thường được coi là kiểu mã hóa xấu ( số ma thuật ), có thể có trường hợp tính năng này hữu ích ...


3
using System.ComponentModel;

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

Câu trả lời này xuất hiện trong hàng đánh giá chất lượng thấp, có lẽ là do bạn không giải thích mã. Nếu bạn giải thích nó (trong câu trả lời của bạn), bạn có nhiều khả năng nhận được nhiều hơn những người ủng hộ và người hỏi thực sự học được điều gì đó!
Chàng trai với chiếc mũ

5
@TheGuywithTheHat Bạn sẽ nhận thấy rằng không có câu trả lời nào ở đây có bất kỳ lời giải thích nào về mã, đặc biệt là tất cả các mẫu mã trong câu trả lời được đánh giá cao này , bởi vì rõ ràng tất cả những gì họ phải làm: chuyển đổi một int thành một chuỗi. Thật ra chúng tôi không cần bất cứ điều gì ngoài câu trả lời được chấp nhận - i.ToString- phần còn lại chỉ ở đây vì mục đích hoàn chỉnh và vui vẻ.
nmclean

2
Việc thiếu một lời giải thích trong các câu trả lời khác không có nghĩa là tất cả các câu trả lời nên thiếu lời giải thích. Lý do duy nhất tôi nhận xét về câu trả lời cụ thể này là vì tôi thấy nó trong hàng đánh giá chất lượng thấp.
Chàng trai với chiếc mũ

@TheGuywithThe Tôi không gợi ý rằng câu trả lời của tôi có thể không đầy đủ vì những người khác là; Tôi đang nói không ai trong số họ (bao gồm cả người này) bởi vì ý định là rõ ràng trong bối cảnh của câu hỏi này.
nmclean

2
@reggaeg Ức Đây chủ yếu là một câu trả lời đùa, chúng tôi đã cố tình thêm nhiều cách ngày càng mơ hồ để thực hiện một trong những nhiệm vụ cơ bản nhất. Nhưng với câu hỏi của bạn, lợi thế của phương pháp này sẽ là nếu bạn không biết trước các loại - thay vì typeof(int)typeof(string)bạn có thể có các biến Loại và nó sẽ tìm và sử dụng một trình chuyển đổi phù hợp bất cứ khi nào tồn tại.
nmclean

1
string s = "" + 2;

và bạn có thể làm những điều tốt đẹp như:

string s = 2 + 2 + "you" 

Kết quả sẽ là:

"4 bạn"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.