• <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>

            我希望你是我獨(dú)家記憶

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

            ICustomFormatter, IFormatProvider

            Posted on 2009-07-06 15:58 Hero 閱讀(491) 評(píng)論(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)默認(rèn)格式
             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综合合色蜜桃网| 一本一道久久综合狠狠老| 久久影院综合精品| 久久伊人精品青青草原高清| 久久精品国产清自在天天线| 久久久国产视频| 久久99热狠狠色精品一区| 久久久久久久综合综合狠狠| 怡红院日本一道日本久久| 亚洲精品久久久www| 91精品国产综合久久久久久| 久久青青国产| 久久免费国产精品一区二区| 久久久久av无码免费网| 久久久WWW成人| 久久精品国产亚洲av麻豆色欲 | 伊人久久大香线蕉亚洲| 国产精品久久久久乳精品爆| 99久久精品免费看国产一区二区三区| 久久被窝电影亚洲爽爽爽| 亚洲伊人久久大香线蕉综合图片| 国产精品丝袜久久久久久不卡| 精品久久久久久无码专区| 无码任你躁久久久久久老妇App| 国内精品伊人久久久久网站| 久久久久久夜精品精品免费啦 | 一本色道久久综合亚洲精品| 亚洲国产成人久久笫一页| 国产69精品久久久久9999| 欧美日韩中文字幕久久伊人| 久久国产精品99精品国产987| 精品综合久久久久久98| 国产精品久久久久久久人人看| 久久精品亚洲福利| 精品国产一区二区三区久久蜜臀| 久久精品国产亚洲一区二区| 久久成人国产精品二三区| 日本三级久久网| 久久精品免费大片国产大片|