如何查找和调用的.Net的TypeConverter为特定类型? [英] How to lookup and invoke a .Net TypeConverter for a particular type?

查看:116
本文介绍了如何查找和调用的.Net的TypeConverter为特定类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实现一个通用的运行时类型转换功能,可使用的.Net类型转换器进行转换。

有谁知道如何如何查找和调用类型转换器为特定类型的?

考虑一下这个C#示例:

  //
//转换obj要通过toType'指定的类型。
//
对象的ConvertTo(obj对象,类型toType)
{
    如果(TypeIsEqualOrDerivesFrom(obj.GetType(),toType))<  - 我知道如何实现这一点。
    {
        //物镜的类型是相同的由'toType'或指定的类型
        // obj的类型派生从'toType'指定的类型。
        返回OBJ;
    }

    如果(TypeConverterExists(obj.GetType(),toType)<  - 如何实现这一点?
    {
        //存在一种类型转换器,其能够从转换的
        //的obj要由'toType'中指定的类型的类型。
        返回InvokeTypeConverter(OBJ,toType); <  - 如何实现这一点?
    }

    抛出新TypeConversionFailedException();
}
 

解决方案

 类型转换器转换器= TypeDescriptor.GetConverter(sourceType的);
    如果(converter.CanConvertTo(destinationType)){
        返回converter.ConvertTo(OBJ,destinationType);
    }
    转换器= TypeDescriptor.GetConverter(destinationType);
    如果(converter.CanConvertFrom(sourceType的)){
        返回converter.ConvertFrom(OBJ);
    }
 

您也可以看看 Convert.ChangeType(OBJ,destinationType)

I would like to implement a general purpose runtime type conversion function that makes use .Net TypeConverters to do the conversion.

Does anyone know how to how to look up and invoke a TypeConverter for a particular type?

Consider this C# example:

//
// Convert obj to the type specified by 'toType'.
// 
object ConvertTo(object obj, Type toType)
{
    if (TypeIsEqualOrDerivesFrom(obj.GetType(), toType)) <-- I know how to implement this.
    {
        // The type of obj is the same as the type specified by 'toType' or
        // the type of obj derives from the type specified by 'toType'.
        return obj;
    }

    if (TypeConverterExists(obj.GetType(), toType) <-- How do I implement this?
    {
        // There exists a type convertor that is capable of converting from 
        // the type of obj to the type specified by 'toType'.
        return InvokeTypeConverter(obj, toType); <-- How do I implement this?
    }

    throw new TypeConversionFailedException();
}

解决方案

    TypeConverter converter = TypeDescriptor.GetConverter(sourceType);
    if(converter.CanConvertTo(destinationType)) {
        return converter.ConvertTo(obj, destinationType);   
    }
    converter = TypeDescriptor.GetConverter(destinationType);
    if(converter.CanConvertFrom(sourceType)) {
        return converter.ConvertFrom(obj);
    }

You could also look at Convert.ChangeType(obj, destinationType)

这篇关于如何查找和调用的.Net的TypeConverter为特定类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆