解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
大石头 authored at 2018-05-15 21:21:05
8.58 KiB
X
# ÀàÐÍת»» Utility ## ¸ÅÊö `Utility` ÊÇ NewLife.Core ÖÐ×î»ù´¡µÄ¹¤¾ßÀ࣬Ìṩ¸ßЧ¡¢°²È«µÄÀàÐÍת»»À©Õ¹·½·¨¡£ËùÓÐת»»·½·¨¾ùÖ§³ÖĬÈÏÖµ£¬ÔÚת»»Ê§°Üʱ·µ»ØÄ¬ÈÏÖµ¶ø²»Å׳öÒì³££¬¼«´ó¼ò»¯ÁËÈÕ³£¿ª·¢ÖеÄÀàÐÍת»»²Ù×÷¡£ **ÃüÃû¿Õ¼ä**£º`NewLife` **ÎĵµµØÖ·**£ºhttps://newlifex.com/core/utility ## ºËÐÄÌØÐÔ - **°²È«×ª»»**£ºËùÓÐת»»Ê§°Üʱ·µ»ØÄ¬ÈÏÖµ£¬²»Å׳öÒì³£ - **À©Õ¹·½·¨**£ºÖ±½ÓÔÚ¶ÔÏóÉϵ÷Óà `.ToInt()`¡¢`.ToDateTime()` µÈ - **¶àÀàÐÍÖ§³Ö**£ºÖ§³Ö×Ö·û´®¡¢È«½Ç×Ö·û¡¢×Ö½ÚÊý×顢ʱ¼ä´ÁµÈ¶àÖÖÊäÈë - **¸ßÐÔÄÜ**£ºÕë¶Ô³£¼û³¡¾°Éî¶ÈÓÅ»¯£¬±ÜÃâ²»±ØÒªµÄÄÚ´æ·ÖÅä - **¿ÉÀ©Õ¹**£ºÍ¨¹ý `DefaultConvert` ÀàÖ§³Ö×Ô¶¨Òåת»»Âß¼­ ## ¿ìËÙ¿ªÊ¼ ```csharp using NewLife; // ×Ö·û´®×ªÕûÊý var num = "123".ToInt(); // 123 var num2 = "abc".ToInt(-1); // -1£¨×ª»»Ê§°Ü·µ»ØÄ¬ÈÏÖµ£© // ×Ö·û´®×ªÊ±¼ä var dt = "2024-01-15".ToDateTime(); var dt2 = "invalid".ToDateTime(); // DateTime.MinValue // ¶ÔÏóת²¼¶û var flag = "true".ToBoolean(); // true var flag2 = "1".ToBoolean(); // true var flag3 = "yes".ToBoolean(); // true ``` ## API ²Î¿¼ ### ÕûÊýת»» #### ToInt ```csharp public static Int32 ToInt(this Object? value, Int32 defaultValue = 0) ``` ½«¶ÔÏóת»»Îª32λÕûÊý¡£ **Ö§³ÖµÄÊäÈëÀàÐÍ**£º - ×Ö·û´®£¨º¬È«½ÇÊý×Ö£© - ×Ö½ÚÊý×飨С¶ËÐò£¬1-4×Ö½Ú£© - DateTime£¨×ªÎªUnixÃ룬²»º¬Ê±Çø×ª»»£© - DateTimeOffset£¨×ªÎªUnixÃ룩 - ʵÏÖ `IConvertible` µÄÀàÐÍ **ʾÀý**£º ```csharp // »ù±¾×ª»» "123".ToInt() // 123 " 456 ".ToInt() // 456£¨×Ô¶¯È¥³ý¿Õ¸ñ£© "£±£²£³".ToInt() // 123£¨Ö§³ÖÈ«½ÇÊý×Ö£© "1,234,567".ToInt() // 1234567£¨Ö§³Öǧ·Ö룩 // ×Ö½ÚÊý×éת»»£¨Ð¡¶ËÐò£© new Byte[] { 0x01 }.ToInt() // 1 new Byte[] { 0x01, 0x00 }.ToInt() // 1 new Byte[] { 0x01, 0x00, 0x00, 0x00 }.ToInt() // 1 // ʱ¼äתUnixÃë DateTime.Now.ToInt() // µ±Ç°Unixʱ¼ä´Á£¨Ã룩 // ת»»Ê§°Ü·µ»ØÄ¬ÈÏÖµ "abc".ToInt() // 0 "abc".ToInt(-1) // -1 ((Object?)null).ToInt() // 0 ``` #### ToLong ```csharp public static Int64 ToLong(this Object? value, Int64 defaultValue = 0) ``` ½«¶ÔÏóת»»Îª64볤ÕûÊý¡£ **ÌØÊâ´¦Àí**£º - DateTime תΪ Unix ºÁÃ루²»º¬Ê±Çø×ª»»£© - ×Ö½ÚÊý×éÖ§³Ö 1-8 ×Ö½Ú **ʾÀý**£º ```csharp "9223372036854775807".ToLong() // Int64.MaxValue DateTime.Now.ToLong() // µ±Ç°Unixʱ¼ä´Á£¨ºÁÃ룩 ``` ### ¸¡µãÊýת»» #### ToDouble ```csharp public static Double ToDouble(this Object? value, Double defaultValue = 0) ``` ½«¶ÔÏóת»»ÎªË«¾«¶È¸¡µãÊý¡£ **ʾÀý**£º ```csharp "3.14".ToDouble() // 3.14 "3.14E+10".ToDouble() // 31400000000£¨Ö§³Ö¿ÆÑ§¼ÆÊý·¨£© "1,234.56".ToDouble() // 1234.56£¨Ö§³Öǧ·Ö룩 ``` #### ToDecimal ```csharp public static Decimal ToDecimal(this Object? value, Decimal defaultValue = 0) ``` ½«¶ÔÏóת»»Îª¸ß¾«¶È¸¡µãÊý£¬ÊÊÓÃÓÚ½ðÈÚ¼ÆËãµÈ¾«¶ÈÒªÇó¸ßµÄ³¡¾°¡£ **ʾÀý**£º ```csharp "123456789.123456789".ToDecimal() // ¾«È·±£ÁôСÊý ``` ### ²¼¶ûֵת»» #### ToBoolean ```csharp public static Boolean ToBoolean(this Object? value, Boolean defaultValue = false) ``` ½«¶ÔÏóת»»Îª²¼¶ûÖµ¡£ **Ö§³ÖµÄÕæÖµ**£º`true`¡¢`True`¡¢`1`¡¢`y`¡¢`yes`¡¢`on`¡¢`enable`¡¢`enabled` **Ö§³ÖµÄ¼ÙÖµ**£º`false`¡¢`False`¡¢`0`¡¢`n`¡¢`no`¡¢`off`¡¢`disable`¡¢`disabled` **ʾÀý**£º ```csharp "true".ToBoolean() // true "True".ToBoolean() // true "1".ToBoolean() // true "yes".ToBoolean() // true "on".ToBoolean() // true "enable".ToBoolean() // true "false".ToBoolean() // false "0".ToBoolean() // false "no".ToBoolean() // false "off".ToBoolean() // false "invalid".ToBoolean() // false£¨Ä¬ÈÏÖµ£© "invalid".ToBoolean(true) // true£¨Ö¸¶¨Ä¬ÈÏÖµ£© ``` ### ʱ¼äת»» #### ToDateTime ```csharp public static DateTime ToDateTime(this Object? value) public static DateTime ToDateTime(this Object? value, DateTime defaultValue) ``` ½«¶ÔÏóת»»ÎªÊ±¼äÈÕÆÚ¡£ **Ö§³ÖµÄ¸ñʽ**£º - ±ê×¼ÈÕÆÚʱ¼ä×Ö·û´® - `yyyy-M-d` ¸ñʽ - `yyyy/M/d` ¸ñʽ - `yyyyMMddHHmmss` ¸ñʽ - `yyyyMMdd` ¸ñʽ - Unix Ã루Int32£© - Unix ºÁÃ루Int64£¬×Ô¶¯Åжϣ© - UTC ±ê¼Ç£¨Ä©Î² `Z` »ò ` UTC`£© **ʾÀý**£º ```csharp // ×Ö·û´®×ª»» "2024-01-15".ToDateTime() "2024-1-5".ToDateTime() // Ö§³Öµ¥Î»ÊýÔÂÈÕ "2024/01/15".ToDateTime() "20240115".ToDateTime() "20240115120000".ToDateTime() "2024-01-15 12:30:45".ToDateTime() "2024-01-15T12:30:45Z".ToDateTime() // UTC ʱ¼ä // Unix ʱ¼ä´Áת»» 1705276800.ToDateTime() // Unix Ãë 1705276800000L.ToDateTime() // Unix ºÁÃ루×Ô¶¯Åжϣ© ``` > **×¢Òâ**£ºÕûÊýתʱ¼äʱ²»½øÐÐ UTC Óë±¾µØÊ±¼äת»»¡£ÔÚÎïÁªÍø³¡¾°ÖУ¬É豸¿ÉÄÜλÓÚ²»Í¬Ê±Çø£¬½¨ÒéͳһʹÓà UTC ʱ¼ä´«ÊäºóÔÙת»»¡£ #### ToDateTimeOffset ```csharp public static DateTimeOffset ToDateTimeOffset(this Object? value) public static DateTimeOffset ToDateTimeOffset(this Object? value, DateTimeOffset defaultValue) ``` ½«¶ÔÏóת»»Îª´øÊ±ÇøµÄʱ¼äÈÕÆÚ¡£ ### ʱ¼ä¸ñʽ»¯ #### ToFullString ```csharp public static String ToFullString(this DateTime value, String? emptyValue = null) public static String ToFullString(this DateTime value, Boolean useMillisecond, String? emptyValue = null) ``` ½«Ê±¼ä¸ñʽ»¯Îª `yyyy-MM-dd HH:mm:ss` ±ê×¼¸ñʽ¡£ **²ÎÊý˵Ã÷**£º - `useMillisecond`£ºÊÇ·ñ°üº¬ºÁÃ룬¸ñʽΪ `yyyy-MM-dd HH:mm:ss.fff` - `emptyValue`£ºµ±Ê±¼äΪ `MinValue` ʱÏÔʾµÄÌæ´ú×Ö·û´® **ʾÀý**£º ```csharp DateTime.Now.ToFullString() // "2024-01-15 12:30:45" DateTime.Now.ToFullString(true) // "2024-01-15 12:30:45.123" DateTime.MinValue.ToFullString("") // "" DateTime.MinValue.ToFullString("N/A") // "N/A" ``` #### Trim ```csharp public static DateTime Trim(this DateTime value, String format = "s") ``` ½Ø¶Ïʱ¼ä¾«¶È¡£ **¸ñʽ²ÎÊý**£º - `ns`£ºÄÉÃ뾫¶È£¨Êµ¼ÊΪ 100ns£¬¼´ 1 tick£© - `us`£ºÎ¢Ã뾫¶È - `ms`£ººÁÃ뾫¶È - `s`£ºÃ뾫¶È£¨Ä¬ÈÏ£© - `m`£º·ÖÖÓ¾«¶È - `h`£ºÐ¡Ê±¾«¶È **ʾÀý**£º ```csharp var dt = new DateTime(2024, 1, 15, 12, 30, 45, 123); dt.Trim("s") // 2024-01-15 12:30:45.000 dt.Trim("m") // 2024-01-15 12:30:00.000 dt.Trim("h") // 2024-01-15 12:00:00.000 dt.Trim("ms") // ±£ÁôºÁÃë ``` ### ×Ö½Úµ¥Î»¸ñʽ»¯ #### ToGMK ```csharp public static String ToGMK(this Int64 value, String? format = null) public static String ToGMK(this UInt64 value, String? format = null) ``` ½«×Ö½ÚÊý¸ñʽ»¯Îª¿É¶ÁµÄµ¥Î»×Ö·û´®¡£ **ʾÀý**£º ```csharp 1024L.ToGMK() // "1.00K" 1048576L.ToGMK() // "1.00M" 1073741824L.ToGMK() // "1.00G" 1099511627776L.ToGMK() // "1.00T" // ×Ô¶¨Òå¸ñʽ 1536L.ToGMK("n1") // "1.5K" 1536L.ToGMK("n0") // "2K" ``` ### Òì³£´¦Àí #### GetTrue ```csharp public static Exception GetTrue(this Exception ex) ``` »ñÈ¡Òì³£µÄÕæÊµÄÚ²¿Òì³££¬×Ô¶¯½â°ü `AggregateException`¡¢`TargetInvocationException`¡¢`TypeInitializationException` µÈ°ü×°Òì³£¡£ **ʾÀý**£º ```csharp try { // ¿ÉÄÜÅ׳ö°ü×°Òì³£µÄ´úÂë } catch (Exception ex) { var realEx = ex.GetTrue(); Console.WriteLine(realEx.Message); } ``` #### GetMessage ```csharp public static String GetMessage(this Exception ex) ``` »ñÈ¡¸ñʽ»¯µÄÒì³£ÏûÏ¢£¬¹ýÂ˵ô²»±ØÒªµÄ¶ÑÕ»ÐÅÏ¢£¨Èç `System.Runtime.ExceptionServices` µÈ£©¡£ ## ×Ô¶¨Òåת»» ͨ¹ýÌæ»» `Utility.Convert` ¿ÉÒÔ×Ô¶¨ÒåËùÓÐÀàÐÍת»»µÄÐÐΪ£º ```csharp public class MyConvert : DefaultConvert { public override Int32 ToInt(Object? value, Int32 defaultValue) { // ×Ô¶¨Òåת»»Âß¼­ if (value is MyCustomType mct) return mct.Value; return base.ToInt(value, defaultValue); } } // È«¾ÖÌæ»» Utility.Convert = new MyConvert(); ``` ## ×î¼Ñʵ¼ù ### 1. ʼÖÕÌṩÓÐÒâÒåµÄĬÈÏÖµ ```csharp // ÍÆ¼ö£ºÃ÷È·Ö¸¶¨Ä¬ÈÏÖµ var port = config["Port"].ToInt(8080); var timeout = config["Timeout"].ToInt(30); // ²»ÍƼö£ºÊ¹ÓÃÒþʽĬÈÏÖµ 0 ¿ÉÄܵ¼ÖÂÎÊÌâ var port = config["Port"].ToInt(); // Èç¹ûÅäÖÃȱʧ£¬¶Ë¿ÚΪ 0 ``` ### 2. ʱ¼ä´Áת»»×¢ÒâÊ±Çø ```csharp // ÎïÁªÍø³¡¾°£ºÉ豸Éϱ¨ UTC ʱ¼ä´Á var deviceTime = timestamp.ToDateTime(); // ²»º¬Ê±Çø×ª»» var localTime = deviceTime.ToLocalTime(); // תΪ±¾µØÊ±¼ä // »òÕßʹÓà DateTimeOffset var dto = timestamp.ToDateTimeOffset(); ``` ### 3. ÀûÓÃÁ´Ê½µ÷Óüò»¯´úÂë ```csharp // ´«Í³Ð´·¨ Int32 value; if (!Int32.TryParse(str, out value)) value = defaultValue; // NewLife д·¨ var value = str.ToInt(defaultValue); ``` ## ÐÔÄÜ˵Ã÷ - ËùÓÐת»»·½·¨Õë¶Ô³£¼ûÀàÐÍ£¨String¡¢Int32 µÈ£©½øÐÐÁË¿ìËÙ·¾¶ÓÅ»¯ - ×Ö·û´®×ª»»Ê¹Óà `Span<T>` ±ÜÃâ²»±ØÒªµÄÄÚ´æ·ÖÅä - ʱ¼ä¸ñʽ»¯±ÜÃâʹÓà `ToString()` ¸ñʽ»¯£¬²ÉÓÃÊÖ¶¯Æ´½ÓÌáÉýÐÔÄÜ - ×Ö½ÚÊý×éת»»Ö±½ÓʹÓà `BitConverter`£¬ÎÞ¶îÍ⿪Ïú ## Ïà¹ØÁ´½Ó - [×Ö·û´®À©Õ¹ StringHelper](/NewLife/X/Blob/dev/Doc/string_helper-×Ö·û´®À©Õ¹StringHelper.md) - [Êý¾ÝÀ©Õ¹ IOHelper](/NewLife/X/Blob/dev/Doc/io_helper-Êý¾ÝÀ©Õ¹IOHelper.md)