程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 點滴拾遺,拾遺記

點滴拾遺,拾遺記

編輯:C#入門知識

點滴拾遺,拾遺記


點擊下載示例代碼

String.Format 一重載方法的簽名如下

1 public static string Format(
2     IFormatProvider provider,
3     string format,
4     params Object[] args
5 )

可以通過自定義 IFormatProvider 接口來控制 String.Format 執行過程中的特定行為。

 

過程如下

1, 自定義類實現 IFormatProvider 接口(object GetFormat 方法)

1 public object GetFormat(Type formatType)
2 {
3     if (formatType == typeof(ICustomFormatter))
4         return this;
5     else
6         return null;
7 }

 

2, 實現 ICustomFormatter 借口(string Format 方法)

摘自 MSDN。功能為控制 Int64 type 的string輸出。

 1 public string Format(string fmt, object arg, IFormatProvider formatProvider)
 2 {
 3     // Provide default formatting if arg is not an Int64. 
 4     if (arg.GetType() != typeof(Int64))
 5         try
 6         {
 7             return HandleOtherFormats(fmt, arg);
 8         }
 9         catch (FormatException e)
10         {
11             throw new FormatException(String.Format("The format of '{0}' is invalid.", fmt), e);
12         }
13 
14     // Provide default formatting for unsupported format strings. 
15     string ufmt = fmt.ToUpper(CultureInfo.InvariantCulture);
16     if (!(ufmt == "H" || ufmt == "I"))
17         try
18         {
19             return HandleOtherFormats(fmt, arg);
20         }
21         catch (FormatException e)
22         {
23             throw new FormatException(String.Format("The format of '{0}' is invalid.", fmt), e);
24         }
25 
26     // Convert argument to a string. 
27     string result = arg.ToString();
28 
29     // If account number is less than 12 characters, pad with leading zeroes. 
30     if (result.Length < ACCT_LENGTH)
31         result = result.PadLeft(ACCT_LENGTH, '0');
32     // If account number is more than 12 characters, truncate to 12 characters. 
33     if (result.Length > ACCT_LENGTH)
34         result = result.Substring(0, ACCT_LENGTH);
35 
36     if (ufmt == "I")                    // Integer-only format.  
37         return result;
38     // Add hyphens for H format specifier. 
39     else                                          // Hyphenated format. 
40         return result.Substring(0, 5) + "-" + result.Substring(5, 3) + "-" + result.Substring(8);
41 }

 

使用實現好的 Format 類

 1 long acctNumber;
 2 double balance;
 3 DaysOfWeek wday;
 4 string output;
 5 
 6 acctNumber = 104254567890;
 7 balance = 16.34;
 8 wday = DaysOfWeek.Monday;
 9 
10 output = String.Format((new AcctNumberFormat(),
11                        "On {2}, the balance of account {0:H} was {1:C2}.",
12                        acctNumber, balance, wday);
13 Console.WriteLine(output);

 

執行結果如下

 

參考資料

Culture invariant Decimal.TryParse()  http://stackoverflow.com/questions/23131414/culture-invariant-decimal-tryparse

What does IFormatProvider do?  http://stackoverflow.com/questions/506676/what-does-iformatprovider-do

IFormatProvider Interface  https://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved