Синтаксис С#.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);
}