【问题标题】:C#: how to construct stringsC#:如何构造字符串
【发布时间】:2010-05-06 06:19:04
【问题描述】:

以下哪项会达到正确的结果:

(1)

int X = 23;
string str = "HELLO" + X.ToString() + "WORLD";

(2)

int X = 23;
string str = "HELLO" + X + "WORLD";

(3)

int X = 23;
string str = "HELLO" + (string)X + "WORLD";

编辑:“正确”结果是 str 评估为:HELLO23WORLD

【问题讨论】:

  • 不得不说,正确的结果是什么?
  • 嗯,除了C#中没有toString()这样的东西之外,它是ToString()
  • 试试看。你有一个方便的编译器,不是吗?如果您这样做了,您会很快识别出第一个版本中的错字。无论如何,达林的答案更好。
  • 你意识到 1 不会编译(类型,ToString() 需要大写)并且 3 会给你一个无效的强制转换异常,对吧?
  • @R0MANARMY:好的,所以你说答案不可能是 3。

标签: c# string casting


【解决方案1】:
int X = 23;
string str = string.Format("HELLO{0}WORLD", X);

【讨论】:

  • 请在投反对票时发表评论。我的回答有问题吗?
  • -1:问题询问三个代码段中的哪一个产生了正确的结果,但您的答案仍然有用,因为它显示了另一种方法,但它没有回答问题
  • +1:很多比串联字符串好。回答者仅仅因为没有解释为什么它比问题中发布的 3 个更好的选择而受到处罚,这感觉是错误的。
  • 这个问题问的是三者中哪一个是正确的。创建第四个选项不是问题的有效答案。
【解决方案2】:

选项 3 无法编译,因为您无法将 int 强制转换为 string

另外两个产生相同的结果。但是,有一个细微的差别。

在内部,加号运算符编译为对String.Concat 的调用。 Concat 有不同的重载。选项 1 调用 Concat(string, string, string) 而选项 2 调用 Concat(object, object, object) 并带有两个字符串和一个装箱的 int。在内部 Concat 然后在装箱的 int 上调用 ToString

另外,检查这个相关问题:Strings and ints, implicit and explicit

【讨论】:

  • 为什么选项 2 不在 int 上调用 ToString() 并使用 Concat(string, string, string) 重载?
  • 我认为这是因为它通过让 Concat 方法完成所有工作,使调用者的代码生成更简单。
【解决方案3】:

你也可以使用 StringBuilder:

System.Text.StringBuilder str = new System.Text.StringBuilder();
str.Append("HELLO"); 
str.Append(X); 
str.Append("World");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    相关资源
    最近更新 更多