• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            我希望你是我獨家記憶

            一段永遠封存的記憶,隨風而去
            posts - 263, comments - 31, trackbacks - 0, articles - 3
               :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

            ICustomFormatter, IFormatProvider

            Posted on 2009-07-06 15:58 Hero 閱讀(492) 評論(0)  編輯 收藏 引用 所屬分類: C#積累
              1 // Sample for the IFormatProvider interface and
              2 // the IFormatProvider.GetFormat( Type ) method.
              3 using System;
              4 
              5 // This class implements the "Ra" formatting code. An instance of this 
              6 // class should be passed to methods requiring an IFormatProvider.
              7 public class AnyRadix : ICustomFormatter, IFormatProvider
              8 {
              9     // The value to be formatted is returned as a signed string 
             10     // of digits from the rDigits array. 
             11     const string radixCode = "Ra";
             12     private static char[] rDigits = {
             13         '0''1''2''3''4''5''6''7''8''9'
             14         'A''B''C''D''E''F''G''H''I''J'
             15         'K''L''M''N''O''P''Q''R''S''T'
             16         'U''V''W''X''Y''Z' };
             17         
             18     // This method returns an object that implements ICustomFormatter 
             19     // to do the formatting. 
             20     public object GetFormat( Type argType )
             21     {
             22         // Here, the same object (this) is returned, but it would 
             23         // be possible to return an object of a different type.
             24         if ( argType == typeof( ICustomFormatter ) )
             25             return this;
             26         else
             27             return null;
             28     } 
             29         
             30     // This method does the formatting only if it recognizes the 
             31     // format codes. 
             32     public string Format( string formatString, 
             33         object argToBeFormatted, IFormatProvider provider )
             34     {
             35         // If no format string is provided or the format string cannot 
             36         // be handled, use IFormattable or standard string processing.
             37         if( formatString == null || 
             38             ! formatString.Trim( ).StartsWith( radixCode ) )
             39         {
             40             if( argToBeFormatted is IFormattable )//按照系統(tǒng)默認格式
             41                 return ( (IFormattable)argToBeFormatted ).ToString( formatString, provider );
             42             else
             43                 return argToBeFormatted.ToString( );
             44         }
             45 
             46         // The formatting is handled here.
             47         int     digitIndex = 0;
             48         long    radix;
             49         long    longToBeFormatted;
             50         long    longPositive;
             51         char[ ] outDigits = new char63 ];
             52             
             53         // Extract the radix from the format string.
             54         formatString = formatString.Replace( radixCode, "" );
             55         try
             56         {
             57             radix = Convert.ToInt64( formatString );
             58         }
             59         catch( Exception ex )
             60         {
             61             throw new ArgumentException( String.Format( 
             62                 "The radix \"{0}\" is invalid."
             63                 formatString ), ex );
             64         }
             65 
             66         // Verify that the radix is in the proper range.
             67         if( radix <2 || radix > 36 )
             68             throw new ArgumentException( String.Format( 
             69                 "The radix \"{0}\" is not in the range 2..36."
             70                 formatString ) );
             71             
             72         // Verify that the argument can be converted to a long integer.
             73         try
             74         {
             75             longToBeFormatted = (long)argToBeFormatted;
             76         }
             77         catch( Exception ex )
             78         {
             79             throw new ArgumentException( String.Format(
             80                 "The argument \"{0}\" cannot be " +
             81                 "converted to an integer value."
             82                 argToBeFormatted ), ex );
             83         }
             84             
             85         // Extract the magnitude for conversion.
             86         longPositive = Math.Abs( longToBeFormatted );
             87 
             88         // Convert the magnitude to a digit string.
             89         for( digitIndex = 0; digitIndex <= 64; digitIndex++ )
             90         {
             91             if( longPositive == 0 ) break;
             92 
             93             outDigits[ outDigits.Length - digitIndex - 1 ] = 
             94                 rDigits[ longPositive % radix ];
             95             longPositive /= radix;
             96         }
             97             
             98         // Add a minus sign if the argument is negative.
             99         if( longToBeFormatted < 0 )
            100             outDigits[ outDigits.Length - digitIndex++ - 1 ] = 
            101                 '-';
            102 
            103         return new string( outDigits, 
            104             outDigits.Length - digitIndex, digitIndex );
            105     } 
            106 
            107 
            108 class IFormatProviderDemo
            109 {
            110     static void ConvertToAnyRadix( object argToConvert, 
            111         string formatStr )
            112     {
            113         AnyRadix    provider = new AnyRadix( );
            114         string      messageStr = 
            115             String.Format( "{{0:{0}}}", formatStr );
            116 
            117         // Write the first part of the output line.
            118         Console.Write( "{0,18}  {1,-6}", argToConvert, formatStr );
            119 
            120         // Convert the specified argument using the specified format.
            121         try
            122         {
            123             Console.WriteLine( String.Format( 
            124                 provider, messageStr, argToConvert ) );
            125         }
            126         catch( Exception ex )
            127         {
            128             // Display the exception without the stack trace.
            129             int lineEnd = ex.ToString( ).IndexOf( '\n' );
            130             Console.WriteLine( "{0}\n",
            131                 ex.ToString( ).Substring( 0, lineEnd ) );
            132         }
            133     } 
            134         
            135     static void Main( )
            136     {
            137         long twoToThe32 = 4294967296;
            138         long fifteenNines = 999999999999999;
            139             
            140         Console.WriteLine(
            141             "This example of the IFormatProvider interface \n" +
            142             "and the IFormatProvider.GetFormat( Type ) method " +
            143             "\ngenerates the following output.\n" );
            144         Console.WriteLine( "{0,18} Format Result""Number" );
            145         Console.WriteLine( "{0,18} ------ ------""------" );
            146             
            147         // These are valid conversions.
            148         ConvertToAnyRadix( twoToThe32, "Ra2" );
            149         ConvertToAnyRadix( twoToThe32, "Ra5" );
            150         ConvertToAnyRadix( twoToThe32, "Ra16" );
            151         ConvertToAnyRadix( twoToThe32, "Ra23" );
            152         ConvertToAnyRadix( twoToThe32, "Ra36" );
            153         ConvertToAnyRadix( fifteenNines, "Ra2" );
            154         ConvertToAnyRadix( fifteenNines, "Ra3" );
            155         ConvertToAnyRadix( fifteenNines, "Ra8" );
            156         ConvertToAnyRadix( fifteenNines, "Ra11" );
            157         ConvertToAnyRadix( fifteenNines, "Ra16" );
            158         ConvertToAnyRadix( fifteenNines, "Ra23" );
            159         ConvertToAnyRadix( fifteenNines, "Ra36" );
            160         ConvertToAnyRadix( fifteenNines, "E16" );
            161         ConvertToAnyRadix( fifteenNines, "" );
            162             
            163         // These are error conditions.
            164         ConvertToAnyRadix( fifteenNines, "Ra37" );
            165         ConvertToAnyRadix( "ABCDEFGHIJKLM""Ra16" );
            166     } 
            167 
            168 
            169 /*
            170 This example of the IFormatProvider interface
            171 and the IFormatProvider.GetFormat( Type ) method
            172 generates the following output.
            173 
            174             Number Format Result
            175             ------ ------ ------
            176         4294967296  Ra2   100000000000000000000000000000000
            177         4294967296  Ra5   32244002423141
            178         4294967296  Ra16  100000000
            179         4294967296  Ra23  1606K7IC
            180         4294967296  Ra36  1Z141Z4
            181    999999999999999  Ra2   11100011010111111010100100110001100111111111111111
            182    999999999999999  Ra3   11212010201001210101011021212000
            183    999999999999999  Ra8   34327724461477777
            184    999999999999999  Ra11  26A6A3689065639
            185    999999999999999  Ra16  38D7EA4C67FFF
            186    999999999999999  Ra23  1134DIFHLMM4
            187    999999999999999  Ra36  9UGXNORJLR
            188    999999999999999  E16   9.9999999999999900E+014
            189    999999999999999        999999999999999
            190    999999999999999  Ra37  System.ArgumentException: The radix "37" is not in th
            191 e range 2..36.
            192 
            193      ABCDEFGHIJKLM  Ra16  System.ArgumentException: The argument "ABCDEFGHIJKLM
            194 " cannot be converted to an integer value. ---> System.InvalidCastException: Sp
            195 ecified cast is not valid.
            196 */
            夜夜亚洲天天久久| 午夜欧美精品久久久久久久| 色播久久人人爽人人爽人人片AV| 国内精品久久久久影院网站| 欧美久久综合九色综合| 久久久精品国产sm调教网站| 国内精品久久九九国产精品| 色综合久久88色综合天天 | 亚洲愉拍99热成人精品热久久 | 久久伊人色| 久久婷婷五月综合97色一本一本| 999久久久国产精品| 亚洲中文字幕无码久久2020| 国内精品久久久久久麻豆| 亚洲AV无码一区东京热久久| 99久久精品免费| 99久久国产宗和精品1上映| 办公室久久精品| 久久中文骚妇内射| 偷偷做久久久久网站| 久久精品综合一区二区三区| 久久久久久午夜成人影院 | 久久中文字幕视频、最近更新 | av无码久久久久不卡免费网站| 久久综合久久鬼色| 国产精品成人无码久久久久久| 亚洲精品美女久久久久99| 欧美亚洲国产精品久久| 亚洲国产成人精品91久久久| 久久久噜噜噜久久| 久久精品国产99久久丝袜| 久久国产精品免费| 久久国产香蕉一区精品| 国产福利电影一区二区三区久久老子无码午夜伦不 | 一本一道久久综合狠狠老 | 久久久久噜噜噜亚洲熟女综合| 久久精品国产亚洲麻豆| 欧美精品一区二区精品久久| 国产精品久久久久久久久鸭 | 久久精品国产清高在天天线| 久久久婷婷五月亚洲97号色|