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
.
签出字符串。格式,这是使用它的代码版本:
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);
}