`
maplye
  • 浏览: 114690 次
  • 来自: ...
社区版块
存档分类
最新评论

Nullable 类型的转换

    博客分类:
  • .NET
阅读更多
今天碰到Nullable 不能通过Convert.ChangeType转换,辛苦在网上找到两个解决方法,共享一下。
1.The PumaCode.org Blog
public object ChangeType(object value, Type conversionType)
{
    
if ( conversionType.IsGenericType &&
        conversionType.GetGenericTypeDefinition( ).Equals( 
typeof( Nullable<> ) ) ) {
 
        
if(value == null)
            
return null;
 
        System.ComponentModel.NullableConverter nullableConverter
            
= new System.ComponentModel.NullableConverter(conversionType);
 
        conversionType 
= nullableConverter.UnderlyingType;
    }

 
    
return Convert.ChangeType(value, conversionType);
}
引用:http://blog.pumacode.org/2006/05/18/using-convert-changetype-on-nullable-types/

2.Paul Wilson's .NET Blog
public class DataTypeConverter
    
{
        
public static object ChangeType(Type type,object value)
        
{
            
if ((value == null&& type.IsGenericType)
            
{
                
return Activator.CreateInstance(type);
            }

            
if (value == null)
            
{
                
return null;
            }

            
if (type == value.GetType())
            
{
                
return value;
            }

            
if (type.IsEnum)
            
{
                
if (value is string)
                
{
                    
return Enum.Parse(type, value as string);
                }

                
return Enum.ToObject(type, value);
            }

            
if (!type.IsInterface && type.IsGenericType)
            
{
                Type type1 
= type.GetGenericArguments()[0];
                
object obj1 = DataTypeConverter.ChangeType(type1,value);
                
return Activator.CreateInstance(type, new object[] { obj1 });
            }

            
if ((value is string&& (type == typeof(Guid)))
            
{
                
return new Guid(value as string);
            }

            
if ((value is string&& (type == typeof(Version)))
            
{
                
return new Version(value as string);
            }

            
if (!(value is IConvertible))
            
{
                
return value;
            }

            
return Convert.ChangeType(value, type);
        }

    }
这个代码是WilsonORMapper中的QueryHelper类,不好意思,我Reflector了一下。
引用:http://weblogs.asp.net/pjohnson/archive/2006/02/07/437631.aspx
分享到:
评论

相关推荐

    Nullable转换问题

    - 如果属性类型是泛型类型且为`Nullable&lt;T&gt;`,则需要使用`Nullable.GetUnderlyingType`方法获取底层类型,并使用`Convert.ChangeType`方法转换。 3. **关键方法介绍**: - `GetPropertyNames()`: 获取所有属性...

    对象不能从 DBNull 转换为其他类型

    3. **使用TryParse或Nullable类型**:对于某些类型如int,可以使用TryParse方法或者Nullable类型来避免异常。 ```csharp foreach (DataRow dr in table[0].Rows) { int.TryParse(dr["score1"].ToString(), out ...

    (GOOD,PASS)LINQ TO DATATABLE OR DATASET 完美解决方案,可排除DATASET不支持System.Nullable错误,并为GRIDVIEW增加空行

    根据给定的信息,本文将详细解释如何通过 LINQ 来操作 DataTable 或 DataSet,并解决其中遇到的一些常见问题,例如处理 Nullable 类型以及如何为 GridView 控件添加空行。 ### 一、理解 LINQ to DataTable or ...

    关于值类型与列类型不匹配,所需类型是 DataRow的解决方案

    1. **类型转换**:在从 `SqlDataReader` 读取数据时,需要注意数据类型的转换。例如,如果从 `SqlDataReader` 读取的是 `DBNull.Value`,则应将其转换为适当的默认值(如 `null` 或其他默认值)。 2. **性能优化**...

    C#中判断某类型是否可以进行隐式类型转换

    在C#编程中,隐式类型转换是一种无需程序员显式使用转换操作符的类型转换方式。这种转换是安全的,因为编译器可以确保转换不会导致数据丢失或异常。在处理反射、动态类型或者泛型时,判断是否可以进行隐式类型转换就...

    C# 类型基础介绍html格式

    C# 类型基础是编程语言C#中的核心概念,它涉及到变量、数据类型、值与引用类型、装箱与拆箱、以及类型转换等多个方面。理解这些基础将有助于你更好地编写高效、可靠的C#代码。 首先,我们来讨论C#中的数据类型。C#...

    .NET中可空值类型【Nullable&lt;T&gt;】实现原理

    隐式转换允许你直接将一个普通值类型转换为可空值类型,而显式转换则允许将可空值类型转换回普通值类型,但转换前要确保其 HasValue 属性为 true。 对于可空值类型的操作,程序员在使用时需要特别注意。例如,在...

    .NET中的 类型转换深入理解

    在.NET框架中,类型转换是一个重要的概念,涉及到CLR(公共语言运行时)的类型安全特性。类型安全意味着程序只能按照预定的方式操作数据,这有助于避免运行时错误。CLR能够在运行时知道任何对象的类型,这一特性是...

    值类型与引用类型(.html)

    拆箱是将引用类型转换回原来的值类型,需要确保引用非null且实际指向的类型与目标值类型兼容。 理解值类型和引用类型是掌握C#编程的基础,正确选择和使用它们可以提高程序效率,避免不必要的内存开销,并有助于编写...

    C程序设计及应用教程第2章数据类型与流程控制PPT课件.pptx

    本章主要介绍了C#中的数据类型、数据类型转换、常量和变量、运算符与表达式以及流程控制语句。 首先,C#的数据类型分为两大类:值类型(Value Types)和引用类型(Reference Types)。值类型包括简单的数据类型(如...

    PHP7.1新功能之Nullable Type用法分析

    PHP7.1引入了一个重要的新特性,即Nullable Type,它扩展了类型提示的灵活性,使得开发者能够明确地表示一个函数参数或返回值...通过合理利用Nullable Type,我们可以避免类型转换的潜在问题,并遵循更好的编程实践。

    c#上课课件上课课件上课课件

    在C#编程语言中,了解和掌握操作符和类型转换对于初学者至关重要。课件中的第六章主要讲解了这两个主题,让我们深入探讨一下。 首先,我们来看一下操作符和类型检查。在C#中,当我们处理整数类型时,如byte、short...

    C#和VB.NET相互转换工具

    - VB.NET使用`Nullable(of T)`,如`Dim myNullableInt As Integer?`。 6. **异常处理**: - C#使用`try`,`catch`,`finally`,`throw`关键字。 - VB.NET使用`Try...Catch...Finally`,`Throw`关键字。 7. **...

    java转换为C# 大型试验

    C#引入了Nullable类型,允许对值类型进行空值处理,这是Java8才开始支持的部分特性。 3. **异常处理**:Java使用try-catch-finally语句块处理异常,C#也类似,但C#还提供了using语句,用于自动管理资源释放。 4. *...

    C#基础知识 全面解析可空类型

    例如,你可以比较两个可空类型的值,或者将可空类型转换为非可空类型(只有在确定值存在时才安全)。 ```csharp int? nullableA = 5; int? nullableB = 7; int nonNullableA = nullableA ?? 0; // 使用null合并...

    理解 C#值类型与引用类型 (2).docx

    - 装箱和拆箱:尽量避免装箱(将值类型转换为对象引用)和拆箱(从对象引用还原值类型),因为这两个操作会导致额外的内存分配和性能开销。 6. 总结 理解值类型和引用类型之间的差异对于编写高效、无bug的C#代码至...

    理解 C#值类型与引用类型.docx

    - **装箱和拆箱**:装箱将值类型转换为对象引用,消耗额外的内存和CPU时间,应尽量避免不必要的装箱和拆箱操作。 6. **总结** 正确理解和使用值类型和引用类型能提高代码质量和性能。开发人员必须考虑内存管理、...

    【C# 基础精讲】C# 数据类型概述

    - 拆箱是将引用类型转换回其原始值类型的过程,需要确保对象中确实包含该值类型的实例,否则会引发异常。 6. 动态类型(`dynamic`) - C# 4.0引入了动态类型,允许在运行时确定变量的类型,主要用于与非C#代码...

    20110318-练习及可空类型

    1. **可空类型转换**:非空类型与可空类型之间可以直接赋值,但反之则需要显式转换。例如,一个 `int?` 变量可以赋值给 `int` 类型,但一个 `int` 变量不能直接赋值给 `int?`,需要先进行 `GetValueOrDefault()` 或 ...

    C#程序设计-3期(KC008) KC008110100024-值类型和引用类型的最基本的区别是什么?.docx

    3. null 值:值类型不能为 null,除非是可空值类型(`Nullable&lt;T&gt;` 或 `T?`),而引用类型可以为 null。 4. 封装和继承:引用类型支持封装和继承,可以实现多态性,而值类型不支持这些高级面向对象特性。 理解C#中...

Global site tag (gtag.js) - Google Analytics