Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| // <Snippet1> | |
| using System; | |
| using System.Globalization; | |
| public class TelephoneFormatter : IFormatProvider, ICustomFormatter | |
| { | |
| public object GetFormat(Type formatType) | |
| { | |
| if (formatType == typeof(ICustomFormatter)) | |
| return this; | |
| else | |
| return null; | |
| } | |
| public string Format(string format, object arg, IFormatProvider formatProvider) | |
| { | |
| // Check whether this is an appropriate callback | |
| if (! this.Equals(formatProvider)) | |
| return null; | |
| // Set default format specifier | |
| if (string.IsNullOrEmpty(format)) | |
| format = "N"; | |
| string numericString = arg.ToString(); | |
| if (format == "N") | |
| { | |
| if (numericString.Length <= 4) | |
| return numericString; | |
| else if (numericString.Length == 7) | |
| return numericString.Substring(0, 3) + "-" + numericString.Substring(3, 4); | |
| else if (numericString.Length == 10) | |
| return "(" + numericString.Substring(0, 3) + ") " + | |
| numericString.Substring(3, 3) + "-" + numericString.Substring(6); | |
| else | |
| throw new FormatException( | |
| string.Format("'{0}' cannot be used to format {1}.", | |
| format, arg.ToString())); | |
| } | |
| else if (format == "I") | |
| { | |
| if (numericString.Length < 10) | |
| throw new FormatException(string.Format("{0} does not have 10 digits.", arg.ToString())); | |
| else | |
| numericString = "+1 " + numericString.Substring(0, 3) + " " + numericString.Substring(3, 3) + " " + numericString.Substring(6); | |
| } | |
| else | |
| { | |
| throw new FormatException(string.Format("The {0} format specifier is invalid.", format)); | |
| } | |
| return numericString; | |
| } | |
| } | |
| public class TestTelephoneFormatter | |
| { | |
| public static void Main() | |
| { | |
| Console.WriteLine(String.Format(new TelephoneFormatter(), "{0}", 0)); | |
| Console.WriteLine(String.Format(new TelephoneFormatter(), "{0}", 911)); | |
| Console.WriteLine(String.Format(new TelephoneFormatter(), "{0}", 8490216)); | |
| // <Snippet3> | |
| Console.WriteLine(String.Format(new TelephoneFormatter(), "{0}", 4257884748)); | |
| // </Snippet3> | |
| Console.WriteLine(String.Format(new TelephoneFormatter(), "{0:N}", 0)); | |
| Console.WriteLine(String.Format(new TelephoneFormatter(), "{0:N}", 911)); | |
| Console.WriteLine(String.Format(new TelephoneFormatter(), "{0:N}", 8490216)); | |
| // <Snippet2> | |
| Console.WriteLine(String.Format(new TelephoneFormatter(), "{0:N}", 4257884748)); | |
| // </Snippet2> | |
| Console.WriteLine(String.Format(new TelephoneFormatter(), "{0:I}", 4257884748)); | |
| } | |
| } | |
| // </Snippet1> |