我有下一个字符串:
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?
答案 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);
更具可读性。