(字符串)组合目的?

时间:2014-01-15 11:51:41

标签: c# variables types combinations

我正在进行一项任务,要求我......

  

"声明两个类型为string的变量,其值为#34; Hello"和"世界"。   声明一个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);

我相信理解这个额外的路线是练习的目的。所以我的问题是为什么额外的线存在以及获得它的好处是什么?本书的部分是理解类型和变量。

4 个答案:

答案 0 :(得分:1)

额外的行是type cast

  

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

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

在这种情况下,我可以看到它在那里没有任何好处。 Console.WriteLine(object)在内部将对象转换为string,而已经是string的对象只会“转换”为自身。

答案 1 :(得分:0)

拨打电话时的解决方案

Console.WriteLine(Combination)

.ToString()方法在内部调用。因此,你感觉不到区别。

来自MSDN

  

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

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

要理解差异,我们再举一个例子

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

输出将是System.Windows.Forms.TextBox,Text:这是对象的类型

答案 2 :(得分:0)

在您的版本中,行Console.WriteLine中发生的事情是对虚拟ToString方法的调用,因为虚拟实际上是在string中实现的版本中执行的class(只返回字符串)。

给定的解决方案显式地将对象转换为字符串。因此,差异在于提高可读性 - 在场景背后发生的事情越来越少 - 明确表示您正在string实例上进行操作。

答案 3 :(得分:0)

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

另一种方式是......

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