20

这段代码如何翻译成 C#,具体来说如何sprintf在 C# 中实现?

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

4

6 回答 6

25

查看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");
于 2013-01-23T14:44:13.367 回答
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);
于 2013-01-23T14:43:52.370 回答
4

如果你想坚持使用 %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);
于 2013-01-23T14:53:39.790 回答
4

使用 C# 6,您可以使用格式化字符串:

if (TheUser.CheckStatus())
{
    output = $"The user {loggedIn} logged in"
}

字符串内部{loggedIn}是您定义的变量名称。

此外,您在花括号内有智能感知来选择变量名。

于 2016-01-29T02:12:46.750 回答
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;

另见这篇关于复合格式的非常基础的文章

编辑:更短

return string.Format(output, (TheUser.CheckStatus() ? loggedIn : loggedOut));
于 2013-01-23T14:44:37.843 回答
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);
}
于 2017-06-06T13:12:52.527 回答