2013-01-23 32 views
10

該代碼如何被轉換爲C#,具體如何在C#中實現sprintfc#.NET和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

回答

15

退房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"); 
+0

謝謝你的參考! – Jimmyt1988

+2

或作爲一個單一的班輪:'返回string.Format(「用戶{0}登錄」,TheUser.CheckStatus()?「是」:「不是」);' – Stormenet

6

整個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

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; 

另見composite formatting

編輯這個很基本的文章:短

return string.Format(output, (TheUser.CheckStatus() ? loggedIn : loggedOut)); 
+0

sprintf ...服從我或我會讓你穿上尿布細節! – Jimmyt1988

+0

你的'()'不平衡。 –

+0

@HenkHolterman謝謝 – Steve

3

如果你想堅持與%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); 
+0

感謝您的選擇。很高興知道! – Jimmyt1988

+1

我需要那:),謝謝..也不要忘記包括'使用System.Text.RegularExpressions;' – Sourav

4

使用C#6,您可以使用格式表字符串:

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

字符串中的{loggedIn}是您定義的變量名稱。

另外,你在花括號裏面有intellisense來選擇變量名。

+0

是否有可能「加載」這樣一個字符串?例如,從其他地方獲取字符串,然後以某種方式在代碼中使用它? – htmlcoderexe

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