• <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 閱讀(487) 評論(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 */
            狠狠色丁香久久婷婷综合_中| 国产精品禁18久久久夂久| 国产精品久久久久无码av| 久久人人爽人人爽人人片AV高清| 久久精品中文字幕一区| 久久久久亚洲精品无码网址| 久久九九久精品国产免费直播| 久久久久99精品成人片三人毛片 | 久久人人爽人人爽人人片AV麻豆 | 久久综合香蕉国产蜜臀AV| 久久天天躁狠狠躁夜夜avapp| 久久综合伊人77777| 国产香蕉久久精品综合网| 久久精品国产亚洲AV不卡| 久久亚洲精品中文字幕| 国产精品久久久久影院色| 日本久久久久久中文字幕| 国产一区二区三精品久久久无广告| 中文字幕一区二区三区久久网站| 久久99精品久久久久久秒播| 久久久久久国产精品无码下载 | 亚洲国产欧洲综合997久久| 无码国内精品久久人妻蜜桃 | 久久国产亚洲精品| 亚洲精品乱码久久久久久久久久久久 | 精品无码人妻久久久久久| 中文成人无码精品久久久不卡 | 久久久国产乱子伦精品作者| 久久天天躁狠狠躁夜夜av浪潮| 日本加勒比久久精品| 伊人久久大香线焦AV综合影院| 久久久噜噜噜www成人网| 国产2021久久精品| 欧美日韩久久中文字幕| 久久这里只精品国产99热| 国内精品久久久久久久久电影网| 久久精品国产亚洲欧美| 久久人人爽人人爽人人片AV高清 | 久久噜噜久久久精品66| 国产精品久久久久久一区二区三区| 亚洲国产成人久久综合区|