c#泛型TryParse类型转换

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Data;

namespace ConsoleApplication11
{
    class Program
    {
        static void Main(string[] args)
        {
            var dt = new DataTable();
            dt.Columns.Add("c1", typeof(string));
            var row = dt.NewRow();
            row["c1"] = "abc";
            var c = getDataFromDBField<double>(row["c1"], 2);   //返回2
            var d = getDataFromDBField<object>(row["c1"], 2);   //返回"abc"
        }

        private static T getDataFromDBField<T>(object obj, T defaultValue = default(T))
        {
            if (obj == null || obj == DBNull.Value)
                return defaultValue;

            Type t = typeof(T);
            var tryParse = t.GetMethod("TryParse", BindingFlags.Public | BindingFlags.Static, Type.DefaultBinder
                , new Type[] { obj.GetType() , t.MakeByRefType() }
                , new ParameterModifier[] { new ParameterModifier(2) });

            if (tryParse != null)
            {
                var parameters = new object[] { obj, Activator.CreateInstance(t) };
                bool success = (bool)tryParse.Invoke(null, parameters);
                if (success)
                    return (T)parameters[1];
                else
                    return defaultValue;
            }

            return (T)Convert.ChangeType(obj, typeof(T));
        }
    }
}
时间: 2024-09-29 17:03:47

c#泛型TryParse类型转换的相关文章

SpringBank 开发日志 重新设计Action调用Service的参数传递 使用泛型解决类型转换问题

之前想的比较简单,请求到达controller的时候,传给action的参数没有经过任何封装,就是一个Map.然后action再调用service的时候,传递的参数也是map @Controller public class DepositController extends BaseController{ @TransactionMapping(transaction = "Deposit") public Map Deposit(Map request) { Map map = c

说来也惭愧,之前不知道是为什么没人指点还是怎么着~!都还没用过泛型~今天学好了,明天去消灭沉余代码~!

本文将为大家讲述.NET中最常见的一种特性,C#泛型.希望通过本文能帮助大家更好的学习和理解C#泛型,在平时的开发工作中起到事半功倍的效果. 泛型,.NET的这个特性相信大家都已经很熟悉了,提起泛型,不能不首先提到C++中的模板,C++中模板的引入大大提高了代码的重用性,因此也得到了许多程序员的喜爱.因此,在同为强类型语言平台的.NET 2.0和Java 1.5中,它们也都不约而同的引入了泛型的对语言和平台的支持.不过虽然三种语言最终都提供了将类型参数化的功能,然而这个功能在三个平台或语言中的实

java泛型探索——介绍篇

1. 泛型出现前后代码对比 先来看看泛型出现前,代码是这么写的: List words = new ArrayList(); words.add("Hello "); words.add("worlds!"); String s = (String) words.get(0) + (String) words.get(1); System.out.println(s.equals("Hello worlds!")); 而泛型出现后无需做显式转换:

Java 基础之认识 Annotation

Java 基础之认识 Annotation 从 JDK 1.5 版本开始,Java 语言提供了通用的 Annotation 功能,允许开发者定义和使用自己的 Annotation 类型.Annotation 功能包括了关于定义 Annotation 类型的语法,对声明式进行注解的语法,读取 Annotation 的 API,Annotation 在 class 文件中的表现,以及 Annotation 处理工具(APT). Annotation 并不直接对程序的语法产生作用,但是会提供一些程序之

读书笔记:CLR var C# 第12章

1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Text; 6 7 namespace ClrVarCSharp.C12Generic 8 { 9 class Program 10 { 11 public static void Main(string[] args) 12 { 13 //A.Test1(); 14 //B.Test

C# 中out,ref,params参数的使用

C#中有三个高级参数,分别是out,ref,params: 1.out参数 方法使用return 只能返回一个值(一个数值或一个指针值),out参数可以帮助我们在一个方法中返回多个值,不限类型. 在使用out参数的时候需要注意: 在调用方法之前,对out参数传递的变量只需声明,可以赋值也可以不赋值,赋值也会在方法中被覆盖掉. 方法使用了out参数传递变量时,就是要返回值,所以必须在方法内为其赋值. 方法的参数使用out关键字修饰时,在调用该方法时,也要在out参数传递的变量前面加上out关键字才

Java 集合系列之一:JCF集合框架概述

容器,就是可以容纳其他Java对象的对象.Java Collections Framework(JCF)为Java开发者提供了通用的容器 java集合主要划分为四个部分: Collection(List列表.Set集合).Map映射.迭代器(Iterator.Enumeration).工具类(Arrays.Collections) 背景 数组的优势:是一种简单的线性序列,可以快速地访问数组元素,效率高.如果从效率和类型检查的角度讲,数组是最好的.数组的劣势:不灵活.容量需要事先定义好,不能随着需

一起来学Java注解(Annotation)

目录 一. 什么是Annotation 二. Annotation的作用 2.1 编译器使用到的注解 2.2 .class文件使用到的注解 2.3 运行期读取的注解 三. 定义Annotation 3.1 元注解 3.2 定义注解小结 四. Annotation处理 五. 总结 一. 什么是Annotation 我们在平时的开发过程中看到很多如@Override,@SuppressWarnings,@Test等样式的代码就是注解,注解是放到类.构造器.方法.属性.参数前的标记. 二. Annot

杂谈.netcore的Buffer相关新类型

1 文章范围 本文将.netcore新出现的与Buffer操作相关的类型进行简单分析与讲解,由于资料有限,一些见解为个人见解,可能不是很准确.这些新类型将包括BinaryPrimitives.Span<>,Memory<>,ArrayPool<>,Memorypool<> 2 BinaryPrimitives 在网络传输中,最小单位是byte,很多场景,我们需要将int long short等类型与byte[]相互转换.比如,将int转换为BigEndian