如何使用格式化字符串("blah {0}", someValue)实现MyMethod()方法,类似于string.format。

9

String.Format和StringBuilder(通过AppendFormat方法)允许调用者将值注入他们准备好的字符串中,例如:

string temp = string.Format("Item {0} of {1}, Record Id: {2} started...",
  itemCounter.ToString(),
  totalItemsToProcess.ToString(),
  myRecord.RecordId);
MyMethod(temp);

但我不想构建一个字符串并将其传递到"MyMethod()"中,我更想有一个重载函数,人们可以像这样调用:

MyMethod("Item {0} of {1}, Record Id: {2} started...",
  itemCounter.ToString(),
  totalItemsToProcess.ToString(),
  myRecord.RecordId);

你怎么实现这个功能呢?有没有可以利用的东西,还是必须要写一堆自定义代码?


为什么需要MyMethod?我认为string.format更清晰... - Arsen Mkrtchyan
为什么要重复造轮子呢? - V4Vendetta
2
#ArsenMkrt,MyMethod()只是伪代码。我需要提供一个方法,接受基本上是字符串的东西,但很多时候会有各种信息要注入其中。允许调用者使用类似于string.format的重载可以使使用更加容易,代码的其余部分也更加清晰。 - Adrian K
#V4Vendetta,为了方便使用和保持代码的清洁。顺便说一句,我认为它与StringBuilder上的AppendFormat()方法并没有太大的区别 - 我猜(最尊重地说)你也不会称之为重新发明? - Adrian K
有趣的观察:在问题代码中,我从未说过MyMethod()返回任何内容 - 但是所有代码示例都有MyMethod返回一个字符串。这不是批评 - 只是有趣 :) - Adrian K
评论区有许多令人惊叹的技巧和提示,以下是一个很棒的链接:http://blog.stevex.net/string-formatting-in-csharp/ - user153923
5个回答

14

这很简单,但是params还有更复杂的用法:

static string MyMethod( string format, params object[] paramList )
{
    return string.Format(format, paramList);
}

感谢提供示例。Params是它;感谢其他提供链接的人 :) - Adrian K

3

啊,一点都没错。我就知道有一种简单的方法。 - Adrian K

2

抱歉,RedDeckWins - CharithJ 比你早两分钟下注了。 - Adrian K
我在44分钟前回答了,这意味着我的回答是在38或42分钟前的回答之前...如果你将鼠标悬停在“x分钟前”上,你可以看到它发布的时间。 - RedDeckWins

1
你可以创建一个方法,在其中使用String.Format,大概像这样:
private void MyMethod(string separator, params string[] strings)
{
      string concatenatedString = String.Format(separator, strings);

      //More processing
}

1

我不明白为什么你想在这种情况下编写自己的方法,但以下是如何实现的

public string MyMethod(string s, params object[] args)
{
     return string.Format(s,args);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接