2013-12-23 37 views
-1

我最近開始學習Ruby和我看到下面的方式來格式化字符串:加入運營商本地類

"%d"  % 123   #=> "123" 
"%08b %02x" % [15, 15] #=> "00001111 0f" 

有沒有在C#中實現這樣的方式?我嘗試了很多,但所有嘗試都失敗了。這裏是我的嘗試之一的例子:

public static string operator % (string format, IFormatable[] items) { 
    for (int n = 0; n < items.Length; n++) format.Replace("%" + n, items[n].ToString()); 
    return format; 
} 

"%0 %1" % new string[] { "Foo", "Bar" } // Expected result => "Foo Bar" 

我知道像toString()和PadLeft()方法研究,但我想弄清楚,如果所謂的方法也擴展了運營商合作。

+0

你怎麼把這東西加到'string'? – cHao

+4

你爲什麼要這麼做?你已經可以做'string.Format(「{0} {1}」,new [] {「Foo」,「Bar」});'。大多數要實現的「特殊」操作符可能已經以其他更簡單的方式實現。如果您想爲類添加其他功能,請查找擴展方法。 –

+0

我不「添加」字符串的東西。我使用擴展方法(http://msdn.microsoft.com/en-us/library/bb383977.aspx);我沒有具體的理由來嘗試這一點。我只是想測試,如果這個工程:) – Cubinator73

回答

1

方法Convert.ToString()之間:

一個16位帶符號整數的值轉換爲其等效的字符串 表示在指定的位置。

ToString() formats提供,您具有所需的全部功能。您還可以使用String.PadLeft在左側添加0。

int num = 15; 
string binNum = Convert.ToString(num, 2).PadLeft(8,'0'); // value 00001111 
string hexNum = Convert.ToString(num, 16).PadLeft(2, '0'); // value 0f 
+0

謝謝你的答案,但我知道這些功能。我讀了一些關於在方法的第一個參數之前加上「this」使其成爲擴展方法的內容。所以我想嘗試一下,如果這也適用於運營商。這是我的問題的主題。對不起,如果這不明確。 – Cubinator73