zoukankan      html  css  js  c++  java
  • C# 反射类型转换

    /// <summary>
    /// 泛型类型转换
    /// </summary>
    /// <typeparam name="T">要转换的基础类型</typeparam>
    /// <param name="val">要转换的值</param>
    /// <returns></returns>
    /// <remark>
    /// by mcjiffy.cn
    /// </remark>
    public static T ConvertType<T>(object val)
    {
        if (val == null) return default(T);//返回类型的默认值
        Type tp = typeof(T);
        //泛型Nullable判断,取其中的类型
        if (tp.IsGenericType)
        {
            tp = tp.GetGenericArguments()[0];
        }
        //string直接返回转换
        if (tp.Name.ToLower() == "string")
        {
            return (T)val;
        }
        //反射获取TryParse方法
        var TryParse = tp.GetMethod("TryParse", BindingFlags.Public | BindingFlags.Static, Type.DefaultBinder,
                                        new Type[] { typeof(string), tp.MakeByRefType() },
                                        new ParameterModifier[] { new ParameterModifier(2) });
        var parameters = new object[] { val, Activator.CreateInstance(tp) };
        bool success = (bool)TryParse.Invoke(null, parameters);
        //成功返回转换后的值,否则返回类型的默认值
        if (success)
        {
            return (T)parameters[1];
        }
        return default(T);
    }
  • 相关阅读:
    宋体freetype16和12号字无法正常显示
    Visual Studio 2015 自动生成 的大文件xxx.vc.db的删除问题
    PP助手上传失效
    freetype教程网址
    编译器发展
    静态与动态库文件
    makefile文件操作大全
    Unicode编码字符范围和具体文字
    Oracle用户被锁定解决方法
    oracle中rownum和row_number()
  • 原文地址:https://www.cnblogs.com/ppinfo/p/3182502.html
Copyright © 2011-2022 走看看