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
var d = getDataFromDBField<object>(row["c1"], ); //返回"abc"
} private static T getDataFromDBField<T>(object obj, T defaultValue = default(T))
{
if (obj == null || obj == DBNull.Value)
return defaultValue; Type t = typeof(T);
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)) //支持可空类型
t = t.GetGenericArguments()[0];
var tryParse = t.GetMethod("TryParse", BindingFlags.Public | BindingFlags.Static, Type.DefaultBinder
, new Type[] { obj.GetType() , t.MakeByRefType() }
, new ParameterModifier[] { new ParameterModifier() }); if (tryParse != null)
{
var parameters = new object[] { obj, Activator.CreateInstance(t) };
bool success = (bool)tryParse.Invoke(null, parameters);
if (success)
return (T)parameters[];
else
return defaultValue;
} return (T)Convert.ChangeType(obj, typeof(T));
}
}
}
c#泛型TryParse类型转换的更多相关文章
- SpringBank 开发日志 重新设计Action调用Service的参数传递 使用泛型解决类型转换问题
之前想的比较简单,请求到达controller的时候,传给action的参数没有经过任何封装,就是一个Map.然后action再调用service的时候,传递的参数也是map @Controller ...
- java泛型探索——介绍篇
1. 泛型出现前后代码对比 先来看看泛型出现前,代码是这么写的: List words = new ArrayList(); words.add("Hello "); words. ...
- java的泛型hei
泛型是一种未知的数据类型,当我们不知道使用什么数据类型的时候就可以使用泛型 泛型也可以看出是一个变量,用来接受数据类型 E e :Element 元素 T t: Type 类型 /* Collecti ...
- geotrellis使用(十九)spray-json框架介绍
Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 spray-json简介 spray-json使用 ...
- .NET 关键字
一.base关键字 可以通过base关键字访问上一级父类方法的访问.静态static函数无法调用base 二.new 关键字new new有2个作用. new运算符 用来分配内存空间和初始化对象. ...
- Java 基础之认识 Annotation
Java 基础之认识 Annotation 从 JDK 1.5 版本开始,Java 语言提供了通用的 Annotation 功能,允许开发者定义和使用自己的 Annotation 类型.Annotat ...
- Java 集合系列之一:JCF集合框架概述
容器,就是可以容纳其他Java对象的对象.Java Collections Framework(JCF)为Java开发者提供了通用的容器 java集合主要划分为四个部分: Collection(Lis ...
- 五、Java基础加强
Java基础加强 1.MyEclipse的使用工作空间(workspace).工程(project)在eclipse下Java程序的编写和运行,及java运行环境的配置.快捷键的配置,常用快捷键:内容 ...
- Java Collections Framework概览
本文github地址 概览 容器,就是可以容纳其他Java对象的对象.Java Collections Framework(JCF)为Java开发者提供了通用的容器,其始于JDK 1.2,优点是: 降 ...
随机推荐
- Tampermonkey脚本属性
新建脚本属性: // ==UserScript== // @name New Userscript 脚本名 // @namespace http://tampermonkey.net/ 脚本主页 // ...
- navicat 链接 mysql 报错1251
使用版本: navicat for mysql 10.1.7版主 mysql-8.0.11-winx64 版本 报错原因:navicat版本太低(使用新版本navicat或者使用旧版本mysql) 解 ...
- [数据结构]P1.3 栈 Stack
* 注: 本文/本系列谢绝转载,如有转载,本人有权利追究相应责任. 栈是一种先进后出的结构(FILO),常见的操作有:push 入栈.pop删除栈顶元素并返回.peek 查看栈顶元素 与其他线性结构一 ...
- HihoCoder - 1142 ,三分入门
先来说说三分的思想: 从三分法的名字中我们可以猜到,三分法是对于需要逼近的区间做三等分: 我们发现lm这个点比rm要低,那么我们要找的最小点一定在[left,rm]之间.如果最低点在[rm,right ...
- js中Undefined 和 Null的区别
Undefined 和 Null Undefined 这个值表示变量不含有值. 可以通过将变量的值设置为 null 来清空变量. <!DOCTYPE html> <html> ...
- element-ui <el-input> +<el-tree>使用
<template> <!-- 需求:通过点击<el-input> 将<el-tree>树型结构打开,选中<el-tree>某个值显示在<e ...
- struct放入list中按照某字段排序
//管线字段信息 public struct FieldInfo { public int iID; //编号 public string sFieldName; //字段名 public strin ...
- js实现数组去重
1.遍历 let aArray = [1,2,2,3,3,"3"] let bArray = [] for(const a of aArray){ let index = bArr ...
- ES6--闭包数组i的值与var的作用域理解
var a = [];for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); };}a[6](); // 10 变 ...
- .Netcore使用Session
1.使用Session(进程内) 在startup中添加方法 services.AddSession app.UseSession() services.AddDistributedMemoryCa ...