【学艺不精系列】C#类型转换,待续……

本文提供了一种静态类实现的数据类型转换方法,包括但不限于字符串、整数、浮点数、布尔值及日期时间类型的转换。这些方法能有效处理空值、异常情况并返回合适的默认值。
/// <summary>
/// 数据类型转换,静态类
/// </summary>
public static class Parse {

    #region string
    /// <summary>转为字符串,若 obj 为 null,则返回""</summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public static string ToString(object obj) {
        if (obj == null) return "";
        return obj.ToString();
    }

    /// <summary>转为字符串,若 obj 为 null,则返回null</summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public static string ToStringN(object obj) {
        if (obj == null) return null;
        return obj.ToString();
    }
    #endregion

    #region int
    /// <summary>尝试转为 int 型,若转换失败则返回 0</summary>
    /// <param name="obj">参数</param>
    /// <returns></returns>
    public static int ToInt(object obj) {
        int i = 0;
        ToInt(obj, out i);
        return i;
    }

    /// <summary>尝试转为 int 型,若转换失败则结果为 0</summary>
    /// <param name="obj">参数</param>
    /// <param name="msg">转换结果</param>
    /// <returns>失败原因</returns>
    public static string ToInt(object obj, out int result) {
        if (obj == null) {
            result = 0;
            return "参数obj为null。";
        } else {
            try {
                result = int.Parse(ToString(obj));
                return "";
            } catch (Exception e) {
                result = 0;
                return e.Message;
            }
        }
    }

    /// <summary>使用 int.TryParse 方法来尝试转换 int 型,若转换失败则返回 0</summary>
    /// <param name="obj">待转换参数</param>
    /// <returns></returns>
    public static int TryInt(object obj) {
        int i = 0;
        int.TryParse(ToString(obj), out i);
        return i;
    }

    /// <summary>使用 int.TryParse 方法来尝试转换 int 类型,若转换失败则返回默认值</summary>
    /// <param name="obj">待转换参数</param>
    /// <param name="def">默认值</param>
    /// <returns></returns>
    public static int TryInt(object obj, int def) {
        if (obj == null)
            return def;
        int.TryParse(ToString(obj), out def);
        return def;
    }

    /// <summary>使用 int.TryParse 方法来尝试转为 int? 型,若 obj 为 null,则返回 null 值</summary>
    /// <param name="obj">待转换参数</param>
    /// <param name="realnull">true: 若返回 null 值仅仅是因为 obj 为 null,转换失败将返回 0;false: 若返回 null 值可能是转换失败的结果</param>
    /// <returns></returns>
    public static int? TryInt(object obj, bool realnull) {
        if (obj == null) return null;
        int i = 0;
        if (int.TryParse(ToString(obj), out i) || realnull) {
            return i;
        } else {
            return null;
        }
    }
    #endregion

    #region double
    /// <summary>尝试转为 double 型,若转换失败则返回 0</summary>
    /// <param name="obj">参数</param>
    /// <returns></returns>
    public static double ToDouble(object obj) {
        double i = 0.00;
        ToDouble(obj, out i);
        return i;
    }

    /// <summary>尝试转为 double 型,若转换失败则结果为 0</summary>
    /// <param name="obj">参数</param>
    /// <param name="msg">转换结果</param>
    /// <returns>失败原因</returns>
    public static string ToDouble(object obj, out double result) {
        if (obj == null) {
            result = 0.00;
            return "参数obj为null。";
        } else {
            try {
                result = double.Parse(ToString(obj));
                return "";
            } catch (Exception e) {
                result = 0.00;
                return e.Message;
            }
        }
    }

    /// <summary>使用 double.TryParse 方法来尝试转换 double 型,若转换失败则返回 0</summary>
    /// <param name="obj">待转换参数</param>
    /// <returns></returns>
    public static double TryDouble(object obj) {
        double i = 0.00;
        double.TryParse(ToString(obj), out i);
        return i;
    }

    /// <summary>使用 double.TryParse 方法来尝试转换 double 类型,若转换失败则返回默认值</summary>
    /// <param name="obj">待转换参数</param>
    /// <param name="def">默认值</param>
    /// <returns></returns>
    public static double TryDouble(object obj, double def) {
        if (obj == null)
            return def;
        double.TryParse(ToString(obj), out def);
        return def;
    }

    /// <summary>使用 double.TryParse 方法来尝试转为 double? 型,若 obj 为 null,则返回 null 值</summary>
    /// <param name="obj">待转换参数</param>
    /// <param name="realnull">true: 若返回 null 值仅仅是因为 obj 为 null,转换失败将返回 0;false: 若返回 null 值可能是转换失败的结果</param>
    /// <returns></returns>
    public static double? TryDouble(object obj, bool realnull) {
        if (obj == null) return null;
        double i = 0.00;
        if (double.TryParse(ToString(obj), out i) || realnull) {
            return i;
        } else {
            return null;
        }
    }
    #endregion

    #region bool
    /// <summary>尝试转为 bool 型</summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public static bool ToBool(object obj) {
        bool i = false;
        ToBool(obj, out i);
        return i;
    }

    /// <summary>尝试转为 bool 型,并返回失败原因</summary>
    /// <param name="obj">待转换参数</param>
    /// <param name="result">转换结果</param>
    /// <returns>失败原因</returns>
    public static string ToBool(object obj, out bool result) {
        if (obj == null) {
            result = false;
            return "参数obj为null";
        } else {
            try {
                result = bool.Parse(obj.ToString());
                return "";
            } catch (Exception e) {
                result = false;
                return e.Message;
            }
        }
    }

    /// <summary>使用 bool.TryParse 方法来尝试转换 bool 型</summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public static bool TryBool(object obj) {
        bool i = false;
        bool.TryParse(ToString(obj), out i);
        return i;
    }
    #endregion

    #region DateTime
    /// <summary>使用 DateTime.TryParse 方法来尝试转为 DateTime 型,若失败则返回 1900-01-01 00:00:00</summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public static DateTime TryDateTime(object obj) {
        DateTime i = new DateTime(1900, 1, 1, 0, 0, 0);
        DateTime.TryParse(ToString(obj), out i);
        return i;
    }

    /// <summary>使用 DateTime.TryParse 方法来尝试转为 DateTime? 型,若 obj 为 null,则返回 null 值</summary>
    /// <param name="obj">待转换的参数</param>
    /// <param name="realnull">true: 若返回 null 值仅仅是因为 obj 为 null,转换失败将返回 1900-01-01 00:00:00;false: 若返回 null 值可能是转换失败的结果</param>
    /// <returns></returns>
    public static DateTime? TryDateTime(object obj, bool realnull) {
        if (obj == null) return null;
        DateTime i = new DateTime(1900, 1, 1, 0, 0, 0);
        if (DateTime.TryParse(ToString(obj), out i) || realnull) {
            return i;
        } else {
            return null;
        }
    }
    #endregion

}

转载于:https://www.cnblogs.com/i0air/archive/2012/06/18/2553807.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值