我有一種情況,我需要格式化一個整數,取決於它是否爲零。使用自定義數字格式字符串,可以用分號作爲分隔符來實現。考慮以下內容:結合自定義數字格式字符串與十六進制格式字符串
// this works fine but the output is decimal
string format = "{0:0000;-0000;''}";
Console.WriteLine(format, 10); // outputs "0010"
Console.WriteLine(format, -10); // outputs "-0010"
Console.WriteLine(format, 0); // outputs ""
但是,我想要使用的格式是十六進制。我想輸出是更像是:
// this doesn't work
string format = "{0:'0x'X8;'0x'X8;''}";
Console.WriteLine(format, 10); // desired "0x0000000A", actual "0xX8"
Console.WriteLine(format, -10); // desired "0xFFFFFFF6", actual "0xX8"
Console.WriteLine(format, 0); // desired "", actual ""
不幸的是,使用自定義數字格式字符串時,我不知道如何(如果它甚至有可能)使用數字的十六進制表示的自定義格式字符串我的情況不允許太大的靈活性,所以做兩通格式不是一種選擇。無論我做什麼都需要表示爲String.Format樣式格式字符串。
編輯
看在單源的NumberFormatter後(.NET實現僅僅推遲到內部非託管代碼)我已經證實了我的懷疑。十六進制格式字符串被視爲一種特殊情況,它只能用作標準格式字符串,不能用於自定義格式字符串。由於三部分格式字符串不能與標準格式字符串一起使用,所以我幾乎是S.O.L.
我可能會咬緊牙關,使整數屬性是一個可爲空的int,並使用零點我在使用零漂白。
當您嘗試十六進制格式時會發生什麼? – Lazarus 2010-01-13 16:39:18
我用第二種格式的實際輸出更新了問題。但基本上,它將X8(它是一個有效的獨立格式字符串)視爲文字。 – Josh 2010-01-13 16:47:20