C# (字符串)组合用途?
我正在做一个练习,要求我 声明两个字符串类型的变量,值为“Hello”和“World”。 声明object类型的变量。指定从 将两个字符串变量(必要时添加空格)连接到 此变量。打印“对象”类型的变量 这是我最初的解决方案: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(); 我找到了一个很好的网站,上面提供了我正在做
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());