c#.NET and sprintf syntax

本文关键字:syntax sprintf and NET | 更新日期: 2023-09-27 17:55:48

如何将

这段代码转换为 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.

c#.NET and sprintf syntax

签出字符串。格式,这是使用它的代码版本:

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

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

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

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

字符串中的{loggedIn}是已定义的变量名称。

此外,您可以在大括号内进行智能感知来选择变量名称。

如果你想

坚持使用%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);

字符串。救援格式

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

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