C# 为什么可以';我不能显式地将int转换为字符串吗?
如果我尝试这样做,它将不起作用:C# 为什么可以';我不能显式地将int转换为字符串吗?,c#,casting,C#,Casting,如果我尝试这样做,它将不起作用: static void Main(string[] args) { int a = 5000; Console.WriteLine((string)a); } 但不知何故,这很好: static void Main(string[] args) { int a = 5000; Console.WriteLine(a + ""); } 为什么呢?是因为第一个正在尝试更改基类型,而第二个只是将值追加到字符串中?int不能强制转换为
static void Main(string[] args)
{
int a = 5000;
Console.WriteLine((string)a);
}
但不知何故,这很好:
static void Main(string[] args)
{
int a = 5000;
Console.WriteLine(a + "");
}
为什么呢?是因为第一个正在尝试更改基类型,而第二个只是将值追加到字符串中?
int
不能强制转换为string
(1),但是有一个操作符+
接受int
作为左侧参数,接受string
作为右侧参数(2)。此运算符将int
转换为string
,并将两个字符串连接起来
更好的方法可能是只使用Console.WriteLine(A)
将为您调用a.ToString()
。您应该使用:
static void Main(string[] args)
{
int a = 5000;
Console.WriteLine(a);
}
隐式调用a.ToString()
那么您得到的编译时错误是对的?问题是int没有显式地转换为string
所以
不是有效代码,但
a + ""
这意味着代码可以工作,因为它基本上被翻译成
a.ToString() + ""
因此,int被转换成一个字符串值,该字符串值不起作用,因为您在中为a分配了一个纯整型值,因此无法通过隐式转换将其转换为字符串,但其工作方式如下
static void Main(string[] args)
{
int a = 5000;
Console.WriteLine(a);
}
这等于Console.WriteLine(a.ToString())代码>
要在字符串中强制转换int,必须使用int32.parse(string)
这是不对的,Int32的parse方法返回一个整数,它是从字符串解析而来的
要获取另一个数据类型的字符串表示形式,只需使用Object类中的.ToString()。
或者您使用System.Convert.ToString()Upvote来识别是哪个运算符进行了转换。又或者,您误解了cast运算符,该运算符不应调用ToString方法。我在String
或Int32
上都找不到这样的运算符定义。。。它是在哪里定义的?Microsoft的C#语言规范()中的“7.8.4加法运算符”部分显示了定义。@tinman你比我先解释一下:如果字符串串联的操作数为空,则替换空字符串。否则,任何非字符串参数都将通过调用从type对象继承的virtual ToString方法转换为其字符串表示形式。如果ToString返回null,则将替换一个空字符串。“不可能将重载转换运算符从int写入string。您将在哪种类型上写入运算符?(我们曾考虑将“扩展转换运算符”添加到C#4,但从未经过设计阶段。)@Eric,您当然是对的(令人惊讶),我原以为我可以像使用扩展方法一样。以前从未需要这样做,直到现在也从未尝试过。我认为这是可能的。即使你添加了它,我也不认为我会使用。这可能会产生误导,因为它使用的是扩展,这可能会让其他程序员在阅读时感到困惑g一些代码无论它使用什么…它都有效。问题中没有提到任何关于运算符+。问题问为什么它不起作用…这个答案和其他答案指出了原因。
static void Main(string[] args)
{
int a = 5000;
Console.WriteLine(a);
}