Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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# (字符串)组合用途?_C#_Variables_Types_Combinations - Fatal编程技术网

C# (字符串)组合用途?

C# (字符串)组合用途?,c#,variables,types,combinations,C#,Variables,Types,Combinations,我正在做一个练习,要求我 声明两个字符串类型的变量,值为“Hello”和“World”。 声明object类型的变量。指定从 将两个字符串变量(必要时添加空格)连接到 此变量。打印“对象”类型的变量 这是我最初的解决方案: string hi = "Hello"; string wo = "World"; object hiwo = hi + " " + wo; Console.WriteLine(hiwo); Console.ReadLine(); 我找到了一个很好的网站,上面提供了我正在做

我正在做一个练习,要求我

声明两个字符串类型的变量,值为“Hello”和“World”。 声明object类型的变量。指定从 将两个字符串变量(必要时添加空格)连接到 此变量。打印“对象”类型的变量

这是我最初的解决方案:

string hi = "Hello";
string wo = "World";
object hiwo = hi + " " + wo;
Console.WriteLine(hiwo);
Console.ReadLine();
我找到了一个很好的网站,上面提供了我正在做的练习的示例解决方案,我已经开始做这些练习,并将它们与我的答案进行比较。在这个网站上,我注意到,除了一行额外的内容外,我几乎做到了。我已经修改了我的原始代码,以便更容易地说明比较

我的修改代码:

string firstWord = "Hello";
string secondWord = "World";
object combination = firstWord + " " + secondWord;
Console.WriteLine(combination); 
给定的解决方案:

string firstWord = "Hello";
string secondWord = "World";
object combination = firstWord + " " + secondWord;
string a = (string)combination; 
Console.WriteLine(a);
我相信理解这条额外的线是练习的目的。所以我的问题是,为什么会有额外的线路存在,拥有它有什么好处?本书的章节是理解类型和变量。

额外的一行是:

强制转换是一种显式通知编译器您打算进行转换,并且您知道可能会发生数据丢失的方法

通常,强制转换不会返回不同的对象。它只是在运行时检查对象是否是您要强制转换到的类型。也就是说,表达式
firstWord+secondWord
返回类型为
string
的对象。将其分配给类型为
object
的变量不会改变它实际上是
字符串的事实。类似地,执行
(string)组合
不会返回不同的对象–它只是告诉编译器表达式的类型为
字符串
。(如果
组合
不是真正的
字符串
,检查将失败并引发异常。)


在这种情况下,我看不出在那里有什么好处
Console.WriteLine(对象)
在内部将对象转换为
字符串
,而已经是
字符串
的对象将只“转换”为自身。

在您的解决方案中,当您调用

Console.WriteLine(Combination)
.ToString()方法是在内部调用的。因此,你没有感觉到差异

如果值为null,则只写入行终止符。否则,将调用value的ToString方法以生成其字符串表示形式,并将生成的字符串写入标准输出流

而在给定的解决方案中,对象首先转换为字符串,然后写入

为了理解差异,让我们再举一个例子

TextBox tb = new TextBox();
Console.WriteLine(tb);   

输出将是System.Windows.Forms.TextBox,Text:这是您的版本中对象的类型,行
控制台中正在发生的事情。WriteLine
是对虚拟
ToString
方法的调用,由于是虚拟的,实际上在
字符串
类中实现的版本中执行该方法(只返回字符串)


给定的解决方案显式地将对象强制转换为字符串。因此,不同之处在于可读性增加-幕后发生的事情减少-明确表示您正在对
字符串
实例进行操作。

额外的一行是基本地将对象强制转换为字符串类型,以便打印出来

另一种方法是

string firstWord = "hello";
string "secondWord = "world";
object combination = string.Format("{0} {1}", firstWord, secondWord);
Console.WriteLine(combination.ToString());