如何模仿我自己的方法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) { //.. }