【问题标题】:Is there a way to reduce the verbosity of using String.Format(...., p1, p2, p3)?有没有办法减少使用 String.Format(...., p1, p2, p3) 的冗长性?
【发布时间】:2011-02-15 23:59:08
【问题描述】:

我经常使用String.Format(),因为它使字符串的构建更具可读性和可管理性。

有没有办法减少它的语法冗长,例如使用扩展方法等?

Logger.LogEntry(String.Format("text '{0}' registered", pair.IdCode));

public static void LogEntry(string message)
{
    ...
}

例如我想以我使用Console.Write() 的方式使用接收字符串的所有方法和其他方法,例如:

Logger.LogEntry("text '{0}' registered", pair.IdCode);

【问题讨论】:

标签: c# string.format verbosity


【解决方案1】:

怎么样:

static void LogEntry(string format, params object[] args) {
    Console.WriteLine(format, args); // For example.
}

现在你可以这样称呼它:

Logger.LogEntry("text '{0}' registered", pair.IdCode);

【讨论】:

  • @Konrad 参数给了我一个编译器错误。关键字是参数。
【解决方案2】:

如果您控制Logger.LogEntry 方法,您可以简单地添加一个包含string.format 的重载。只需将第二个参数声明为参数数组即可!

【讨论】:

  • @Mitchel:我认为在这种情况下这是一个合理的答案,但我建议对 String 进行扩展更普遍有用。
  • @Steven - 是也不是,对于他的项目是的,对于 Logger.LogEntry() 的其他调用者来说,重载会更好
【解决方案3】:

是的,你可以创建一个名为 FormatWith 的扩展方法,它可以让你说:

Logger.LogEntry("I hate my {0}".FormatWith(itemName));

自己动手应该很容易,但这里有一个例子:http://james.newtonking.com/archive/2008/03/27/formatwith-string-format-extension-method.aspx

【讨论】:

  • 好点,但从开发人员的角度来看,Logger.LogEntry 是一个很多人都会调用的实用函数,我认为获得支持它的方法会很好。另外,这与 string.format 一样冗长.....但对于作者而言,这是最正确的答案。
  • 我不反对您建议的重载的有用性:我自己也做过很多相同的事情。我不同意 FormatWith 方法与 String.Format 一样冗长的想法,不仅因为它更短,而且因为它(出现)作为非静态方法使其不那么突兀。我相信真正的问题是临时超载是否是一种通用解决方案。您不会为每个接受字符串的方法都进行重载,但是使用扩展方法,您会从中受益。
  • @Mitchel Sellers:抱歉,忘记使用@you 来确保您看到了回复。
【解决方案4】:

如果Logger.LogEntry 是您无法控制的静态方法,则否;您只能向实例添加扩展方法。如果是您的类型,您可以添加:

public static void LogEntry(string format, params object[] args) {
    ... string.Format(format,args) ...
}

【讨论】:

    【解决方案5】:

    您可以使用 params 关键字将第一个参数之后的所有参数组合成一个数组,并将该数组传递给 String.Format。

    static void FormatString(string myString, params string[] format)
    {
         Console.WriteLine(String.Format(myString, format));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多