c #.net和sprintf语法

时间:2013-01-23 14:43:08

标签: c# .net

如何将此代码转换为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

6 个答案:

答案 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.Format救援

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;

另见composite formatting

上这篇非常基本的文章

编辑:更短

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);
}