Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';我不能显式地将int转换为字符串吗?_C#_Casting - Fatal编程技术网

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