将int转换为字符串?


Answers:


741
string myString = myInt.ToString();

4
我的问题是您失去类型安全性。myInt可以是任何东西。这里什么也没有说取整数并将其转换为字符串。myInt可以是一个对象,并且不能将对象转换为字符串。这在编译时是已知的,但是它甚至不会引发运行时异常,而只会允许不良数据。
蒂莫西·冈萨雷斯

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进行了一些不必要的装箱,但也许无论如何都会对其进行优化。
斯蒂芬·霍尔特

43
.ToString()是进行转换的最有效方法。.ToString()无论如何,这里介绍的所有其他方法最终都将调用。
Xavier Poinas

6
您一直在重新声明该变量,我感到有些不安s
thecoshman

1
@XavierPoinas虽然他们可能会称其为“ ToString()”,但这在某种程度上取决于您打算如何处理它,这是最有效的。 string s = "xyz" + i;将创建一个新的“ xyz”字符串-创建包含您的整数的新字符串;然后创建一个包含2的3rd字符串。 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));

这个答案出现在低质量的审阅队列中,大概是因为您没有解释代码。如果您确实解释了它(在您的答案中),您更有可能获得更多的支持-提问者实际上学到了一些东西!
戴帽子的家伙2014年

5
@TheGuywithTheHat您会注意到,这里的答案都没有任何代码解释,特别是这个高度支持的答案中的所有代码示例,因为很明显,它们必须要做的事情:将int转换为字符串。坦白说,我们除了已接受的答案外,不需要任何东西i.ToString-其余的只是为了完整性和乐趣。
nmclean 2014年

2
在其他答案中缺少解释并不意味着所有答案都应缺乏解释。我仅对此特定评论发表评论的唯一原因是,因为我在低质量的审阅队列中看到了它。
帽子的家伙

@TheGuywithTheHat我不是在暗示我的答案可能是不完整的,因为其他人是。我说的都是(包括这一点)都不是,因为在这个问题的背景下意图很明显。
nmclean 2014年

2
@reggaeguitar这主要是一个笑话,我们故意添加越来越模糊的方式来执行最基本的任务之一。但是对您的问题而言,此方法的优点是,如果您事先不知道类型-而是可以拥有Type变量,typeof(int)并且typeof(string)只要有变量就可以找到并使用适当的转换器。
nmclean '19

1
string s = "" + 2;

您可以做一些不错的事情,例如:

string s = 2 + 2 + "you" 

结果将是:

“ 4你”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.