Синтаксис С#.NET и sprintf

Как бы этот код был переведен на С#, в частности, как бы 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.

Ответ 1

Отметьте 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");

Ответ 2

Все семейство функций printf в C заменяется на String.Format. Тот же интерфейс также отображается, например, Console.WriteLine().

 string output = "The user {0} logged in";
 string loggedIn = "is";
 string loggedOut = "isn't";


 output = string.Format(output, loggedIn);

Ответ 3

С С# 6 вы можете использовать форматируемую строку:

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

{loggedIn} внутри строки - это имя переменной, которое вы определили.

Кроме того, у вас есть intellisense внутри фигурных скобок, чтобы выбрать имя переменной.

Ответ 4

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

Ответ 5

Если вы хотите придерживаться% s,% d....

string sprintf(string input,params object[] inpVars)
{
    int i=0;
    input=Regex.Replace(input,"%.",m=>("{"+ ++i +"}"));
    return string.Format(input,inpVars);
}

Теперь вы можете сделать

sprintf("hello %s..Hi %d","foofoo",455);

Ответ 6

Анирудха уже принял решение, но не может добавить комментарий, поэтому отправляю ответ. Он должен быть int i=-1; или он сделает исключение.

string sprintf(string input,params object[] inpVars)
{
    int i=-1;
    input=Regex.Replace(input,"%.",m=>("{"+ ++i +"}"));
    return string.Format(input,inpVars);
}