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");