C#如何在开头添加大括号的字符串中添加参数?

时间:2013-09-12 13:00:53

标签: c#

我有下一个字符串:

public const string BaseAddress = "http://test.i-swarm.com/i-swarm/api/v1/";
public const string LoginURL = "{0}sessions";

我想创建一个LoginURL的URL,其中{0}是BaseAddress。 逻辑方式不起作用:

string str = string.Format(BaseAddress, LoginURL);

它只打印BaseAddress。 如果我这样做,它将起作用:

string str = string.Format(LoginURL, BaseAddress); //Is this the correct way?

4 个答案:

答案 0 :(得分:4)

这不符合逻辑,你在LoginUrl中定义参数而不是在BaseAddress中,所以它正常工作

如果你想要它的工作逻辑,那就这样做:

public const string BaseAddress = "http://test.i-swarm.com/i-swarm/api/v1/{0}";
public const string LoginURL = "sessions";

string.Format正在用第一个参数替换{0},因此它现在可以像你希望它一样工作。

答案 1 :(得分:2)

没有逻辑方式,只有一种方法可以符合String.Format的工作方式。定义了String.Format,以便第一个参数包含要插入参数的字符串,然后是参数列表。

如果像你一样定义字符串,唯一正确的方法是

string str = string.Format(LoginURL, BaseAddress);

但是,如果BaseAddress是格式字符串,那将更直观:

public const string BaseAddress = "http://test.i-swarm.com/i-swarm/api/v1/{0}";
public const string LoginURL = "sessions";

所以你可以写

string str = String.Format(BaseAddress, LoginURL);

答案 2 :(得分:1)

string str = string.Format(LoginURL, BaseAddress); //Is this the correct way?

是的,这是正确的方法。虽然它不遵循人们使用的通常模式。请阅读此处函数的文档:http://msdn.microsoft.com/en-us/library/system.string.format.aspx

第一个参数是格式,第二个参数是参数/替换值。假设你想要保持一个常量格式,那通常是在参数中硬编码的:

string str = string.Format("{0}sessions", BaseAddress);

由于基本地址似乎通常更一致(但可能仍然是可变的),因此以下方法可能会更好:

public const string BaseAddress = "http://test.i-swarm.com/i-swarm/api/v1/";
public const string LoginURL = "sessions";
string str = string.Format("{0}{1}", BaseAddress, LoginURL);

如果您的最终目标只是网址组合而不是使用string.Format的练习,则以下可能仍然是更好的方法:

Uri baseUri = new Uri("http://test.i-swarm.com/i-swarm/api/v1/");
Uri myUri = new Uri(baseUri, "sessions");

这样您就不必担心在基地址/相对地址/等中是否使用了分隔符。

答案 3 :(得分:1)

是的,正确的方法是:

string str = String.Format(LoginURL, BaseAddress);

格式字符串应始终是第一个参数。

虽然我觉得:

string str = String.Format("{0}sessions", BaseAddress);

更具可读性。