.net通用类型转换方法

using System;
using System.ComponentModel;
using System.Globalization;

/// <summary>
/// 类型转换
/// </summary>
/// <param name="value">要转换的值</param>
/// <param name="destinationType">转换的目标类型</param>
/// <returns></returns>
public static object To(object value, Type destinationType)
{
    return To(value, destinationType, CultureInfo.InvariantCulture);
}
/// <summary>
/// 类型转换
/// </summary>
/// <param name="value">要转换的值</param>
/// <param name="destinationType">转换的目标类型</param>
/// <param name="culture">区域信息</param>
/// <returns></returns>
public static object To(object value, Type destinationType, CultureInfo culture)
{
    if (value != null)
    {
        var sourceType = value.GetType();

        var destinationConverter = TypeDescriptor.GetConverter(destinationType);
        if (destinationConverter != null && destinationConverter.CanConvertFrom(value.GetType()))
            return destinationConverter.ConvertFrom(null, culture, value);

        var sourceConverter = TypeDescriptor.GetConverter(sourceType);
        if (sourceConverter != null && sourceConverter.CanConvertTo(destinationType))
            return sourceConverter.ConvertTo(null, culture, value, destinationType);

        if (destinationType.IsEnum && value is int)
            return Enum.ToObject(destinationType, (int)value);

        if (!destinationType.IsInstanceOfType(value))
            return Convert.ChangeType(value, destinationType, culture);
    }
    return value;
}
/// <summary>
/// 类型转换
/// </summary>
/// <typeparam name="T">目标类型</typeparam>
/// <param name="value">要转换的值</param>
/// <returns></returns>
public static T To<T>(object value)
{
    return (T)To(value, typeof(T));
}
时间: 2025-01-16 06:39:05

.net通用类型转换方法的相关文章

C# 通用类型转换方法

在程序开发过程中经常需要进行数据的类型转换,而且如果一个字段的类型改成另一个类型时,所有相关的类型转换的地方都要跟着修改,不但造成了很多重复转换的代码而且修改字段类型时额外修改相关转换代码的工作量也很大,为此做了一个通用的类型转换方法,此方法能转换几乎所有简单的值类型以及实现了强制类型转换的引用类型,此方法利用反射和lambda实现,由于此方法是在大约2010年左右写的,当时个人知识有限对反射了解不深,没有将元数据中的方法成功转换成委托以达到更高的运行效率,对效率有要求的同学可以自行扩展一下,有

使用泛型编写通用的C#预处理类型转换方法

废话 从.net3.5发布后,就很多前辈利用泛型创造出了很多很有趣的代码,通用的转换方法也被写的烂了,小弟不才,今天又来写一遍,只是为了做个人知识的管理和追赶大牛的步伐,请各位路过的大大多多批评指正. 思路 1.基本类型都实现了IConvertible这个接口 2.基本类型都实现了TryParse方法 实现 public static class Converter { /// <summary> /// 转换为其他继承IConvertible的类型 /// </summary>

【续】使用泛型编写通用的C#预处理类型转换方法(使用委托提高性能)

优化后的代码: public static class Converter { /// <summary> /// 转换为其他继承IConvertible的类型 /// </summary> /// <typeparam name="T">转换的类型</typeparam> /// <param name="value">要转换的值</param> /// <param name=&quo

ABAP基本数据类型、通用类型

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4292785.html ABAP基本数据类型 更多的类型请参考ABAP数据类型继承图 类型 允许最大长度(字符数) 默认长度(省略时采用) 说明 初始值 C 1~262143个字符 1 字符 如果未在 DATA 语句中指定参数<length>

java中String类型转换方法

integer to String : int i = 42;String str = Integer.toString(i);orString str = "" + idouble to String :String str = Double.toString(i);long to String :String str = Long.toString(l);float to String :String str = Float.toString(f);String to intege

常用类型转换方法工具类

功能:十六进制字符串与字节数组互转.字符转字节.Blob类型转字节数组.阿拉伯数字转中文小写 1 import java.io.BufferedInputStream; 2 import java.io.IOException; 3 import java.sql.Blob; 4 5 /** 6 * 常用类型转换方法工具类 7 */ 8 public class ConvertUtil { 9 10 /** 11 * 字节数组转换为十六进制字符串. 12 * @param src 13 * @r

Swift 通用类型和通用函数 | Generic type and function

如果你想交换两个变量的值: 1. 整型 func swapTwoInts(inout a: Int, inout b: Int) { let temporaryA = a a = b b = temporaryA } 2. 字符串 func swapTwoStrings(inout a: String, inout b: String) { let temporaryA = a a = b b = temporaryA } 3. 浮点型 ... 应该不用我写了吧. 也许你自己写完都觉得累,那怎么

asp.net 自定义的模板方法接口通用类型

本来想写这个帖子已经很久了,但是公司事情多,做着做着就忘记了.公司因为需要做接口,而且用的还是asp.net的老框架,使用Handler来做,没得办法,自己照着MVC写了一个通过的接口操作模板. 上送json数据,返回的也是json数据.可以像MVC一样自动绑定并可以进行DataAnnotations验证.尽量达到在业务逻辑处理区域不用对上送参数做过多的获取和判断,能一次搞定就一次搞定. 话不多说,上代码!!! BaseClass:用作接口参数的基类.接口参数类型可以继承该类,也可以不继承,或自

Array类型-转换方法

转换方法 如前所述,所有对象都具有toLocaleString().toString()和valueOf()方法.调用数组的toString()方法返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔符是字符串.而调用valueOf()返回的还是数组.实际上,为了创建这个字符串会调用数组每一项的toString()方法.来看下面这个例子: var colors=["red","blue","green"];//创建一个包含3个字符串的数组 al