如何模仿我自己的方法string.Format()?

我有一个自定义WriteLine(string)方法的对象。 像这样的东西:

 public void WriteLine(string text) { this.StringList.Add(text); } 

用这种方法复制string.Format()的function最简单的方法是什么? 例如:我目前经常发现自己在做的是这样的:

 myObj.WriteLine(string.Format("Hello, {0}", name)); 

如果你创build一个新的控制台应用程序,他们的WriteLine()方法的版本正是我所希望的:

 Console.WriteLine("Hello, {0}", name); 

它们消除了调用string.Format()的需要。 以某种方式让你的方法容易接受? 或者我将不得不创build一千个方法重载? 像这样的东西:

 public void WriteLine() { ... } public void WriteLine(string text) { ... } public void WriteLine(string text, object arg0) { ... } public void WriteLine(string text, object arg0, object arg1) { ... } public void WriteLine(string text, object arg0, object arg1, object arg2) { this.StringList.Add(string.Format(text, arg0, arg1, arg2)); } // etc etc etc 

这是唯一合乎逻辑的方法吗? 任何build议都欢迎:)

您需要从string.format复制方法签名。

 public void WriteLine(string text,params object[] args) { this.StringList.Add(string.Format(text,args)); } 

正如ChaosPandion所build议的,您还可以包含重载以防止创build数组

 public void WriteLine(string text) { this.StringList.Add(text); } public void WriteLine(string text,object arg0) { this.StringList.Add(string.Format(text, arg0)); } public void WriteLine(string text,object arg0, object arg1) { this.StringList.Add(string.Format(text, arg0, arg1)); } public void WriteLine(string text,object arg0, object arg1, object arg2) { this.StringList.Add(string.Format(text, arg0, arg1, arg2)); } 

我不会像string.format那样经过arg2,所以好处消失了。

有一个边缘的情况,你可能想要尽量避免。 以下代码将string{0}写入控制台

 Console.WriteLine("{0}"); 

但是,在这个答案中,您使用其他人提出的WriteLine实现之一,这些实现会抛出一个exception:

 WriteLine("{0}"); //throws exception 

最简单的解决方法是有两个WriteLine重载或稍微修改build议的代码来处理边界情况:

 public void WriteLine(string text,params object[] args) { var message=args.Length==0 ? text : string.Format(text, args); this.StringList.Add(message); } 

你可以使用params

  public void WriteLine(string text, params object[] parameters) { //.. }