如何将此代码转换为C#,具体如何在C#中实现sprintf
?
string output = "The user %s logged in";
string loggedIn = "is";
string loggedOut = "isn't";
if (TheUser.CheckStatus())
{
output = sprintf(output, loggedIn);
}
else
{
output = sprintf(output, loggedOut);
}
return output;
如果"The user isn't logged in"
为TheUser.CheckStatus()
,我希望看到false
。
答案 0 :(得分:20)
查看string.Format,这是使用它的代码版本:
string output = "The user {0} logged in";
string loggedIn = "is";
string loggedOut = "isn't";
if (TheUser.CheckStatus())
{
output = string.Format(output, loggedIn);
}
else
{
output = string.Format(output, loggedOut);
}
return output;
或更简单:(使用三元表达式)
string output = "The user {0} logged in";
return TheUser.CheckStatus()
? string.Format(output, "is")
: string.Format(output, "isn't");
答案 1 :(得分:6)
C中的整个printf
函数系列由String.Format替换。同样的接口也在例如Console.WriteLine()
中公开。
string output = "The user {0} logged in";
string loggedIn = "is";
string loggedOut = "isn't";
output = string.Format(output, loggedIn);
答案 2 :(得分:4)
使用C#6,您可以使用formattable字符串:
if (TheUser.CheckStatus())
{
output = $"The user {loggedIn} logged in"
}
字符串中的{loggedIn}
是您定义的变量名。
此外,你在花括号内部有智能感知来选择变量名。
答案 3 :(得分:3)
string output = "The user {0} logged in";
string loggedIn = "is";
string loggedOut = "isn't";
output = (TheUser.CheckStatus() ? string.Format(output, loggedIn) :
string.Format(output, loggedOut));
return output;
上这篇非常基本的文章
编辑:更短
return string.Format(output, (TheUser.CheckStatus() ? loggedIn : loggedOut));
答案 4 :(得分:3)
如果你想坚持使用%s,%d ....
string sprintf(string input,params object[] inpVars)
{
int i=0;
input=Regex.Replace(input,"%.",m=>("{"+ i++/*increase have to be on right side*/ +"}"));
return string.Format(input,inpVars);
}
您现在可以
sprintf("hello %s..Hi %d","foofoo",455);
答案 5 :(得分:0)
Anirudha已经编写了解决方案,但我无法添加评论,因此我将其作为答案发布。它必须是int i=-1;
,否则会抛出异常。
string sprintf(string input,params object[] inpVars)
{
int i=-1;
input=Regex.Replace(input,"%.",m=>("{"+ ++i +"}"));
return string.Format(input,inpVars);
}