你知道另一种更适合做同样事情的方法吗?
string initialTemplate = "{0}-{1}";
string template = string.Format(initialTemplate, "first", "{0}");
string answer = string.Format(template, "second");
另外,以下方式实际上已知,但在我目前的情况下,不幸的是我无法使用该方法(我认为这种方式更合适,逻辑更清晰):
string initialTemplate = "{0}-{{0}}";
string template = string.Format(initialTemplate, "first");
string answer = string.Format(template, "second");
也许有另外一个提示如何做到这一点?
更新 我很抱歉,但是从你的回答中我得知我的问题不够明确。所以我添加了更多的描述。
我的情况:
//that template is actually placed in *.resx file
//I want storing only one template and use that in different situations
public const string InitialTemplate = "{0}-{1}";
public static string GetMessage(string one, string two)
{
return string.Format(InitialTemplate, one, two);
}
public static string GetTemplate(string one)
{
return string.Format(InitialTemplate, one, "{0}");
}
//or morew universal way
public static string GetTemplate(params object[] args)
{
return string.Format(InitialTemplate, args, "{0}");
}
static void Main(string[] args)
{
//in almost all cases in my project i need to use string.format like this
string message = GetMessage("one", "two");
//but there is another way where i have to use
//the template have already been assigned first argument
//the result must be "one-{0}"
string getTemplateWithAssignedFirstArg = GetTemplate("one");
}
你知道更适合这种情况的方法吗?
答案 0 :(得分:4)
如果您使用的是C#6,也可以使用字符串插值。 https://msdn.microsoft.com/en-us/library/dn961160.aspx
var answer = $"{firstVar}-{secondVar}";
答案 1 :(得分:3)
string initialTemplate = "{0}-{1}";
string answer = string.Format(initialTemplate, "first", "second");
应该做的伎俩。或者删掉中间人:
string answer = string.Format("{0}-{1}", "first", "second");
答案 2 :(得分:1)
String.Format
是一个非常有用的便利,但我担心使用它来构建您将用于创建其他格式字符串的格式字符串。有人试图维护这些代码,弄清楚发生了什么,也许修改它将会感到困惑。以这种方式使用String.Format
在技术上是可行的,甚至可能存在有用的情况,但它可能只是会产生一些有效但很难理解和调试的东西。
我的第一个建议是使用StringBuilder
。即使您正在追加到StringBuilder
,也可以根据需要使用String.Format
创建单个字符串。
我想知道你在问题中描述的内容是否可能是在多个方法中进行的(这就是为什么你可能会逐步构建格式字符串的原因。)如果是这样的话,我建议你不要构建字符串。这样的步骤。实际上,在您拥有所需的所有数据之前,不要开始构建字符串,然后立即构建字符串。