如何在自己的方法中模仿string.Format()
本文关键字:string Format 自己的 方法 | 更新日期: 2023-09-27 18:08:31
我有一个自定义WriteLine(string)
方法的对象。像这样:
public void WriteLine(string text)
{
this.StringList.Add(text);
}
用这种方法复制string.Format()
的功能最简单的方法是什么?例如:我现在经常发现自己在做的是:
myObj.WriteLine(string.Format("Hello, {0}", name));
如果你创建一个新的控制台应用程序,他们的WriteLine()
方法版本做的正是我想做的:
Console.WriteLine("Hello, {0}", name);
它们消除了调用string.Format()
的需要。让你的方法接受这个是否容易?还是需要创建上千个方法重载?像这样:
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
这是唯一合乎逻辑的方法吗?欢迎提出任何建议:)
您需要从string.format复制方法签名。
public void WriteLine(string text,params object[] args) {
this.StringList.Add(string.Format(text,args));
}
根据ChaosPandion的建议,你也可以通过重载来防止数组的创建
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));
}
我不会超过arg2作为字符串。格式没有,所以好处就消失了。
有一种极端情况您可能希望尽量避免。下面的代码将把字符串{0}写入控制台
Console.WriteLine("{0}");
但是,如果您使用了这个答案中其他人建议的WriteLine实现之一,这些实现将抛出异常:
WriteLine("{0}"); //throws exception
最简单的修复方法是重载两次WriteLine,或者稍微修改建议的代码来处理边缘情况:
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)
{
//..
}