我有一个自定义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,因为格式不会因此好处消失.

Asp.net相关问答推荐

如何根据另一个下拉列表中的 Select 从下拉列表中删除一个值?

在哪里可以记录 ASP.NET Core 应用程序的启动/停止/错误事件?

是否可以在没有那些 .svn 文件夹的情况下从 subversion 签出文件?

使用实体框架从存储过程中获取数据

Window.Open 使用 PDF 流而不是 PDF 位置

更新到 ASP.NET Core 2.0 - 包与 netcoreapp2.0 不兼容

在控制器 asp.net mvc 5 的视图上显示错误消息

我应该使用用户名还是用户 ID 来引用 ASP.NET 中经过身份验证的用户

使用 gridview asp.net 进行排序和分页

为什么aspx文件会返回404(找不到页面)

在 asp.net 中调整图像大小而不会丢失图像质量

ASP.NET 日期时间 Select 器

如何在 ASP.NET MVC3 中配置区域

IIS Express - 增加内存限制

禁用 web.config 继承?

.NET AJAX 调用 ASMX 或 ASPX 或 ASHX?

OWIN 和 Katana,为什么要将应用程序与服务器解耦?

会员生成密码 仅限字母数字密码?

路由模板分隔符/不能连续出现 - 属性路由问题

MVC4 中 Global.asax.cs 页面中的问题