将整数转换为字符串?

600

如何在C#中将int数据类型转换为string数据类型?

12个回答

866
string myString = myInt.ToString();

5
我的问题是,这样会失去类型安全性。myInt 可能是任何类型,这里没有说明需要将一个整数转换为字符串。myInt 可能是一个对象,而对象无法转换为字符串。虽然编译时就能确定,但它甚至不会引发运行时异常,只会允许错误的数据存在。 - Timothy Gonzalez
5
那是一个边缘情况,如果你调用.ToString()通常是因为你需要它成为一个字符串,并且它可以成为一个字符串。 - EpicKip
55
@nfgallimore,这不是一个有效的边缘情况,甚至在这种情况下都不是边缘情况。OP表示他有一个int类型,他想将其转换为字符串。如果它是一个int类型,那么简单地说,值就是一个int。编译器会确保这一点。我甚至不确定你是如何进入那个话题的。OP没有问如何确保随机引用是整数,然后将其转换为字符串。也许在那种情况下你是正确的,但这不是这种情况。 - AaronM
2
@MehdiDehghani,问题中的数据类型int不会为空。但是为了论证,数据类型int? 可能为空,但这将返回一个空字符串,而不是抛出异常。然而,如果数据类型不是int,而是被装箱为objectint?,那么如果为空,它将抛出异常。 - Anthony Pegram
42
这个回答下的评论很荒谬。 - user1228
显示剩余7条评论

564
string a = i.ToString();
string b = Convert.ToString(i);
string c = string.Format("{0}", i);
string d = $"{i}";
string e = "" + i;
string f = string.Empty + i;
string g = new StringBuilder().Append(i).ToString();

6
你可以使用这个语句:string count = "" + intCount; - Dion Dirza
2
所有这些解决方案的效率都一样吗?我想i.ToString()会对int进行一些不必要的装箱,但也许已经被优化了。 - Stephen Holt
54
.ToString()是进行类型转换最高效的方式。这里介绍的所有其他方法最终都会调用.ToString() - Xavier Poinas
8
我感到有点不安,因为你不断重新声明变量s - thecoshman

35

如果你需要二进制表示并且你还在昨晚的派对上喝醉了:

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

29
int num = 10;
string str = Convert.ToString(num);

15

任何对象的 ToString 方法都应该返回该对象的字符串表示形式。

int var1 = 2;

string var2 = var1.ToString();

11
进一步回应@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

11
string str = intVar.ToString();
在某些情况下,您不必使用ToString()
string str = "hi " + intVar;

9

或者:

string s = Convert.ToString(num);

4
using System.ComponentModel;

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

这个答案出现在低质量审核队列中,可能是因为您没有解释代码。如果您在回答中解释了它,您很有可能会获得更多的赞同,并且提问者实际上也会学到一些东西! - The Guy with The Hat
5
你会注意到这里的任何答案都没有对代码进行解释,特别是在这个受赞最多的回答中的所有代码示例,因为它们所做的事情显而易见:将整数转换为字符串。实际上,除了被接受的答案 - i.ToString - 我们不需要其他任何东西,其余仅出于完整性和好玩而存在。 - nmclean
这种做法有什么优势吗?它使用晦涩的类,只是为了增加复杂性而没有任何好处。 - reggaeguitar
2
@reggaeguitar 这主要是一个玩笑回答,我们故意添加了越来越难以理解的方式来完成最基本的任务。但是针对你的问题,这种方法的优点在于如果你事先不知道类型 - 你可以使用类型变量而不是 typeof(int)typeof(string),并且它会在存在适当的转换器时找到并使用它们。 - nmclean

4

没有一个答案提到过,ToString() 方法 可以应用于整数表达式

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

甚至可以应用于整数字面量
Debug.Assert(256.ToString("X")=="100");

虽然像这样的整数字面量通常被认为是不好的编码风格(魔法数字),但在某些情况下,此功能可能是有用的...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接