C#:如何构造字符串
以下哪项将获得正确的结果: (一) (二) (三)C#:如何构造字符串,c#,string,casting,C#,String,Casting,以下哪项将获得正确的结果: (一) (二) (三) 编辑:“正确”结果是将str计算为:HELLO23WORLD选项3未编译,因为您无法将int强制转换为字符串 int X = 23; string str = string.Format("HELLO{0}WORLD", X); 另外两个产生相同的结果。然而,有一个微妙的区别 在内部,plus操作符编译为对String.Concat的调用Concat具有不同的重载。选项1调用Concat(string,string,string),而选项2调
编辑:“正确”结果是将
str
计算为:HELLO23WORLD选项3未编译,因为您无法将int
强制转换为字符串
int X = 23;
string str = string.Format("HELLO{0}WORLD", X);
另外两个产生相同的结果。然而,有一个微妙的区别
在内部,plus操作符编译为对String.Concat
的调用Concat
具有不同的重载。选项1调用Concat(string,string,string)
,而选项2调用Concat(object,object,object)
,使用两个字符串和一个装箱整数。内部Concat
然后调用装箱整数上的ToString
此外,请检查此相关问题:您也可以使用StringBuilder:
System.Text.StringBuilder str = new System.Text.StringBuilder();
str.Append("HELLO");
str.Append(X);
str.Append("World");
我不得不说,正确的结果是什么?好吧,除了C#中没有toString()
这一事实之外,它是toString()
。试试看。你手边有个编译器,是吗?如果你在第一个版本中发现了一个拼写错误,你会很快发现。无论如何,Darin的答案更好。你知道1不会编译(type,ToString()需要大写),3会给你一个无效的强制转换异常,对吗?@R0MANARMY:好的,那么你是说答案不能是3。请在投票时留下评论。我的回答有问题吗?-1:问题是三个代码段中的哪一个产生了正确的结果,但你的回答仍然有用,因为它显示了一种替代方法,但它没有回答问题+1:比串接好得多。回答者仅仅因为没有解释为什么它比问题中的3个选项更好而受到处罚,这让人感觉是错误的。问题问这三个选项中哪一个是正确的。创建第四个选项不是问题的有效答案。为什么选项2不在int上调用ToString()并使用Concat(string,string,string)重载?我认为这是因为它让Concat方法完成所有工作,从而简化了调用方的代码生成。
int X = 23;
string str = "HELLO" + (string)X + "WORLD";
int X = 23;
string str = string.Format("HELLO{0}WORLD", X);
System.Text.StringBuilder str = new System.Text.StringBuilder();
str.Append("HELLO");
str.Append(X);
str.Append("World");