Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何将参数添加到开头带有大括号的字符串中?_C# - Fatal编程技术网

C#如何将参数添加到开头带有大括号的字符串中?

C#如何将参数添加到开头带有大括号的字符串中?,c#,C#,我有下一个字符串: public const string BaseAddress = "http://test.i-swarm.com/i-swarm/api/v1/"; public const string LoginURL = "{0}sessions"; 我想创建一个LoginURL的url,其中{0}是基地址。 逻辑方式不起作用: string str = string.Format(BaseAddress, LoginURL); 它只打印基地址。 如果我这样做,它将起作用: s

我有下一个字符串:

public const string BaseAddress = "http://test.i-swarm.com/i-swarm/api/v1/";
public const string LoginURL = "{0}sessions";
我想创建一个LoginURL的url,其中{0}是基地址。 逻辑方式不起作用:

string str = string.Format(BaseAddress, LoginURL);
它只打印基地址。 如果我这样做,它将起作用:

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

这不是合乎逻辑的方式,您在LoginUrl中定义参数而不是在BaseAddress中,所以它工作正常

如果你想让它正常工作,可以这样做:

public const string BaseAddress = "http://test.i-swarm.com/i-swarm/api/v1/{0}";
public const string LoginURL = "sessions";
Format正在用第一个参数替换
{0}
,因此它现在可以正常工作

string str = string.Format(LoginURL, BaseAddress); //Is this the correct way?
是的,这是正确的方法。虽然它不遵循人们通常使用的模式。请阅读此处功能的文档:

第一个参数是格式,第二个是参数/替换值。假设您希望保持一个常量格式,该格式通常是参数中的硬编码格式,如下所示:

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);
如果您的最终目标只是URL组合,而不是使用
string.Format
进行练习,那么以下方法可能仍然是更好的方法:

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

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

是的,正确的方法是:

string str = String.Format(LoginURL, BaseAddress);
格式字符串应始终是第一个参数

虽然我觉得:

string str = String.Format("{0}sessions", BaseAddress);
更具可读性。

没有逻辑方法,只有一种方法符合
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);

第二个是逻辑(以及实现的)版本。想想如果有多个参数,调用应该是什么样子。MSDN:OP提到过;]他在问为什么(不是我的-1)是的。我的评论是,你编辑了你的答案,这样否决票就没有理由了。我很想撤销我的否决票,但我不能,因为它被锁定了。这很不幸。我在完成之前就提交了这篇文章。不用担心:)