Che*_*hev 39 .net c# asp.net string methods
我有一个自定义WriteLine(string)方法的对象.像这样的东西:
public void WriteLine(string text)
{
this.StringList.Add(text);
}
Run Code Online (Sandbox Code Playgroud)
string.Format()使用此方法复制功能的最简单方法是什么?例如:我目前经常发现自己在做的是:
myObj.WriteLine(string.Format("Hello, {0}", name));
Run Code Online (Sandbox Code Playgroud)
如果您创建一个新的控制台应用程序,他们的WriteLine()方法版本完全符合我的要求:
Console.WriteLine("Hello, {0}", name);
Run Code Online (Sandbox Code Playgroud)
他们不需要打电话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
Run Code Online (Sandbox Code Playgroud)
这是唯一合乎逻辑的方法吗?欢迎任何建议:)
Bob*_*ale 63
您需要从string.format复制方法签名.
public void WriteLine(string text,params object[] args) {
this.StringList.Add(string.Format(text,args));
}
Run Code Online (Sandbox Code Playgroud)
根据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));
}
Run Code Online (Sandbox Code Playgroud)
我不会越过arg2作为string.format不会因此消失.
你可以使用params:
public void WriteLine(string text, params object[] parameters)
{
//..
}
Run Code Online (Sandbox Code Playgroud)
有一个边缘情况你可能想要避免痛苦.以下代码将字符串{0}写入控制台
Console.WriteLine("{0}");
Run Code Online (Sandbox Code Playgroud)
但是,您在本答案中使用其他人建议的WriteLine实现之一,这些实现将引发异常:
WriteLine("{0}"); //throws exception
Run Code Online (Sandbox Code Playgroud)
最简单的解决方法是要么有两次WriteLine重载,要么稍微修改建议的代码来处理边缘情况:
public void WriteLine(string text,params object[] args) {
var message=args.Length==0 ? text : string.Format(text, args);
this.StringList.Add(message);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13218 次 |
| 最近记录: |