我正在进行一项任务,要求我......
"声明两个类型为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);
我相信理解这个额外的路线是练习的目的。所以我的问题是为什么额外的线存在以及获得它的好处是什么?本书的部分是理解类型和变量。
答案 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());