【问题标题】:String concatenation doesn't seem to work in C#字符串连接似乎在 C# 中不起作用
【发布时间】:2009-12-29 12:29:43
【问题描述】:

我不知道下面的字符串有什么问题:

"Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + "  to  " + System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy") +  ")"

我无法获得连接的字符串。我收到Report(29-Dec-2009。仅此而已 其余的从字符串中排除。

是什么原因?

【问题讨论】:

  • 您能否提供一些您看到的结果的详细信息?你有例外吗?您是否得到了一个出乎意料的字符串结果?
  • 尝试在此代码执行后立即设置断点。检查分配给它的变量的值。这将排除以后发生的任何截断。
  • 请提供一个简短但完整的程序来演示该问题,我怀疑答案会变得清晰。显示的单个表达式 不是 问题(尽管我认为使用 String.Format 会更简洁)。
  • 您在哪里看到“Report(29-Dec-2009”字符串?在调试器中?将字符串打印到控制台时?在屏幕上只能显示 18 的字段中显示时一个字符?
  • 我打赌你只看到前半部分,但变量包含所有消息。必须是短标签尺寸等。

标签: c# string-concatenation


【解决方案1】:

试试这个:

string filename = 
    String.Format(
        "Report({0:dd-MMM-yyyy} to {1:dd-MMM-yyyy})",
         System.DateTime.Now, System.DateTime.Now.AddMonths(-1));

编辑:因为在您的下载框中,您的文件名在第一个空格中被破坏了,您可以尝试以下方法之一:

filename = HttpUtility.UrlEncode(filename); // OR
filename = """" + filename + """";

似乎有些浏览器不能很好地处理空格:Filenames with spaces are truncated upon download。请检查是否可以在其他站点下载其他带有空格的文件名。

【讨论】:

  • 我将此字符串文件名传递给我的报告标题,但它似乎没有使用我的文件名..
  • @Rubens 我希望文件名是报告(2009 年 12 月 29 日至 2009 年 11 月 29 日),但我在保存/打开对话框中的文件名显示报告(2009 年 12 月 29 日..跨度>
  • @ruben 为什么这个文件名没有显示在我的打开/保存对话框中,因为我正在导出过去一个月的报告
  • @rubens firefox 似乎忽略了第一个空格中的文件名
  • 所以你遇到了浏览器问题,而不是 C#;您可以用_ 替换文件名中的所有空格,例如filename = filename.Replace(" ", "_");
【解决方案2】:

你需要把它分配给某物:

string s = "Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + " to " + System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy") + ")"

更新:我刚刚看到您对该问题的更新。你如何显示字符串?我猜您是在 GUI 中显示它,并且标签太短而无法显示完整的文本。

【讨论】:

    【解决方案3】:

    试试这个:

    string newstring = 
      string.Format(
                    "Report ({0} to {1})", 
                    System.DateTime.Now.ToString("dd-MMM-yyyy"), 
                    System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy")
                   );
    

    【讨论】:

      【解决方案4】:

      您将结果分配给什么?如果你使用 string.Format 会更容易阅读代码

      【讨论】:

        【解决方案5】:

        你没有将连接的结果分配给任何东西,所以不能使用它:

        string myConcatenated = "Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + ")";
        

        【讨论】:

          【解决方案6】:

          使用此代码...

          string test = "Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + " to " +
                             System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy") + ")";
          

          我看到了以下结果。

          Report(29-Dec-2009 to 29-Nov-2009)
          

          可能是字符串稍后被截断。确保在运行此代码后立即设置断点并检查分配给它的变量的值(在我的情况下为测试)。

          【讨论】:

            【解决方案7】:

            如果像您的previous question 一样,您正在使用此值来创建文件,则可能是“to”之前的空格导致了问题。尝试使用:

            "Report("
                + System.DateTime.Now.ToString("dd-MMM-yyyy")
                + "To"
                + System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy")
                +  ")"
            

            然后看看是否能解决问题。

            如果确实修复了它,您可能需要弄清楚如何引用整个文件名,这样它就不会被视为三个单独的参数,"Report(29-Dec-2009""to""29-Nov-2009)"。或者干脆将您的报告名称不带空格。

            我会选择后者,但我从根本上反对文件名中的空格 - 它们使简单的脚本更难编写:-)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-02-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-01-12
              • 2018-09-03
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多