我有一个使用自定义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
这是唯一符合逻辑的方法吗?欢迎任何建议:)
答案 0 :(得分:63)
您需要从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,因为string.format不会因此消失。
答案 1 :(得分:7)
您可以使用params
:
public void WriteLine(string text, params object[] parameters)
{
//..
}
答案 2 :(得分:7)
你可能想要避免使用一个边缘案例。以下代码将字符串 {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);
}