• <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 閱讀(488) 評論(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 )//按照系統默認格式
             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 */
            欧美成a人片免费看久久| 精品久久久久久综合日本| 精品久久久久久久中文字幕| 99久久精品国产一区二区三区| 国产精品热久久无码av| 婷婷久久五月天| 精品免费久久久久久久| 久久天天日天天操综合伊人av| 国产亚洲美女精品久久久2020| 久久综合久久综合久久综合| 亚洲精品无码久久毛片| 久久国产精品无码一区二区三区| 久久亚洲电影| 欧美激情精品久久久久| 国产69精品久久久久久人妻精品| 免费观看久久精彩视频| 久久精品中文字幕一区| 久久久久人妻精品一区三寸蜜桃 | 青青草原精品99久久精品66| 亚洲午夜精品久久久久久人妖| 欧美久久久久久| 久久有码中文字幕| 久久国产免费| 久久久综合九色合综国产| 日产精品久久久久久久性色| 性高朝久久久久久久久久| 久久久久久国产a免费观看不卡| 国产精品视频久久久| 久久久久久无码Av成人影院| 久久人人爽人人爽人人片AV高清| 久久精品国产亚洲一区二区三区| 成人精品一区二区久久| 国产一级持黄大片99久久| 人妻丰满AV无码久久不卡 | 色综合久久无码中文字幕| 亚洲精品美女久久久久99小说 | 国产精品欧美亚洲韩国日本久久| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 久久久亚洲精品蜜桃臀| 久久人妻少妇嫩草AV无码蜜桃 | 97精品国产91久久久久久|