20

このコードはどのように 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

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

printfC の関数ファミリー全体が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 に答える
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 に答える