- 浏览: 114673 次
- 来自: ...
文章分类
最新评论
-
Juanjuel:
Django多表查询 -
chenokia:
那么在\grails-app\conf 下的DataSourc ...
Grails如何使用外部配置文件 -
viking2439:
有没有方法去指定用户去获得某个权限呢?
[django]总结Django中的用户权限模块
今天碰到Nullable 不能通过Convert.ChangeType转换,辛苦在网上找到两个解决方法,共享一下。
1.The PumaCode.org Blog
2.Paul Wilson's .NET Blog
引用:http://weblogs.asp.net/pjohnson/archive/2006/02/07/437631.aspx
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/{
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);
}
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了一下。{
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);
}
}
引用:http://weblogs.asp.net/pjohnson/archive/2006/02/07/437631.aspx
发表评论
-
IBatisNet系列-介绍篇
2006-03-25 14:56 1026IBatisNET从名字就可以看出,他是从Java的IBati ... -
IBatisNet系列二-QuickStart篇
2006-03-25 14:59 974本节我参考官方网站上的Quick Start Guide,网址 ... -
IBatisNet系列-执行存储过程
2006-03-25 15:24 1172映射xml文件书写如下 <?xml version=& ... -
IBatis.Net系列-Mapped Statements的语法
2006-03-29 15:25 888语法:<statement id="state ... -
Castle- Startable Facility 简单理解
2006-03-30 17:56 877最近在研究Castle开源项目,就下午学习Startable ... -
IBatis.Net系列-多参数的SQL语句的配置
2006-04-15 12:15 1454由于本人对IBatis.Net的并不是很精通,也是在边学边工作 ... -
MonoRail学习-介绍篇
2006-04-24 10:22 752刚刚结束了使用Castle MonoRail的一个项目,所以想 ... -
MonoRail学习-入门实例篇
2006-04-24 11:51 1333MonoRail学习目录实例代码下载:/Files/maply ... -
MonoRails学习- Layouts
2006-04-24 12:14 832MonoRail学习目录实例代码:/Files/maplye/ ... -
MonoRail学习-Component
2006-04-24 13:30 741MonoRail学习目录在我们asp.net中,经常有界面代码 ... -
Which Style of Workflow When?[转]
2006-05-24 16:58 756http://blogs.msdn.com/davegreen ... -
WF in Asp.Net
2006-05-26 11:19 968这几天在研究Windows Workflow Foundati ... -
WF学习-Console Workflow Application
2006-05-26 16:51 932环境必备:.NET Framework 2.0VS.Net 2 ... -
WF学习-WorkFLow中的参数
2006-05-27 15:46 1164系统和WorkFlow交互有很多种方式,今天介绍的是通过Wor ... -
Castle ActiveRecord.chm
2006-05-31 18:06 758收集 TerryLee's Tech Space 和 SHY5 ... -
使用UserControl时,在Page中定义方式
2006-06-24 10:02 910我们通常,会将一些通用的页面模块作成用户控件,然后加载到页面中 ... -
ASP.Net2.0中自定义控件在page中的注册
2006-06-24 14:15 815今天在网上看到ASP.Net 2.0中注册自定义控件的好方法, ... -
Asp.Net中NHiernate的Session的管理
2006-06-26 11:08 674NHibernate中的Session,在我的理解似乎就相当于 ... -
GridView使用一些记录
2006-06-30 10:45 972现在有个项目开始使用ASP.NET 2.0开发,在开发过程中关 ... -
NHiernate中自定义Generator
2006-07-04 13:50 936我的这个自定义的Generator设置如下: <g ...
相关推荐
- 如果属性类型是泛型类型且为`Nullable<T>`,则需要使用`Nullable.GetUnderlyingType`方法获取底层类型,并使用`Convert.ChangeType`方法转换。 3. **关键方法介绍**: - `GetPropertyNames()`: 获取所有属性...
3. **使用TryParse或Nullable类型**:对于某些类型如int,可以使用TryParse方法或者Nullable类型来避免异常。 ```csharp foreach (DataRow dr in table[0].Rows) { int.TryParse(dr["score1"].ToString(), out ...
根据给定的信息,本文将详细解释如何通过 LINQ 来操作 DataTable 或 DataSet,并解决其中遇到的一些常见问题,例如处理 Nullable 类型以及如何为 GridView 控件添加空行。 ### 一、理解 LINQ to DataTable or ...
1. **类型转换**:在从 `SqlDataReader` 读取数据时,需要注意数据类型的转换。例如,如果从 `SqlDataReader` 读取的是 `DBNull.Value`,则应将其转换为适当的默认值(如 `null` 或其他默认值)。 2. **性能优化**...
在C#编程中,隐式类型转换是一种无需程序员显式使用转换操作符的类型转换方式。这种转换是安全的,因为编译器可以确保转换不会导致数据丢失或异常。在处理反射、动态类型或者泛型时,判断是否可以进行隐式类型转换就...
C# 类型基础是编程语言C#中的核心概念,它涉及到变量、数据类型、值与引用类型、装箱与拆箱、以及类型转换等多个方面。理解这些基础将有助于你更好地编写高效、可靠的C#代码。 首先,我们来讨论C#中的数据类型。C#...
隐式转换允许你直接将一个普通值类型转换为可空值类型,而显式转换则允许将可空值类型转换回普通值类型,但转换前要确保其 HasValue 属性为 true。 对于可空值类型的操作,程序员在使用时需要特别注意。例如,在...
在.NET框架中,类型转换是一个重要的概念,涉及到CLR(公共语言运行时)的类型安全特性。类型安全意味着程序只能按照预定的方式操作数据,这有助于避免运行时错误。CLR能够在运行时知道任何对象的类型,这一特性是...
拆箱是将引用类型转换回原来的值类型,需要确保引用非null且实际指向的类型与目标值类型兼容。 理解值类型和引用类型是掌握C#编程的基础,正确选择和使用它们可以提高程序效率,避免不必要的内存开销,并有助于编写...
本章主要介绍了C#中的数据类型、数据类型转换、常量和变量、运算符与表达式以及流程控制语句。 首先,C#的数据类型分为两大类:值类型(Value Types)和引用类型(Reference Types)。值类型包括简单的数据类型(如...
PHP7.1引入了一个重要的新特性,即Nullable Type,它扩展了类型提示的灵活性,使得开发者能够明确地表示一个函数参数或返回值...通过合理利用Nullable Type,我们可以避免类型转换的潜在问题,并遵循更好的编程实践。
在C#编程语言中,了解和掌握操作符和类型转换对于初学者至关重要。课件中的第六章主要讲解了这两个主题,让我们深入探讨一下。 首先,我们来看一下操作符和类型检查。在C#中,当我们处理整数类型时,如byte、short...
- VB.NET使用`Nullable(of T)`,如`Dim myNullableInt As Integer?`。 6. **异常处理**: - C#使用`try`,`catch`,`finally`,`throw`关键字。 - VB.NET使用`Try...Catch...Finally`,`Throw`关键字。 7. **...
C#引入了Nullable类型,允许对值类型进行空值处理,这是Java8才开始支持的部分特性。 3. **异常处理**:Java使用try-catch-finally语句块处理异常,C#也类似,但C#还提供了using语句,用于自动管理资源释放。 4. *...
例如,你可以比较两个可空类型的值,或者将可空类型转换为非可空类型(只有在确定值存在时才安全)。 ```csharp int? nullableA = 5; int? nullableB = 7; int nonNullableA = nullableA ?? 0; // 使用null合并...
- 装箱和拆箱:尽量避免装箱(将值类型转换为对象引用)和拆箱(从对象引用还原值类型),因为这两个操作会导致额外的内存分配和性能开销。 6. 总结 理解值类型和引用类型之间的差异对于编写高效、无bug的C#代码至...
- **装箱和拆箱**:装箱将值类型转换为对象引用,消耗额外的内存和CPU时间,应尽量避免不必要的装箱和拆箱操作。 6. **总结** 正确理解和使用值类型和引用类型能提高代码质量和性能。开发人员必须考虑内存管理、...
- 拆箱是将引用类型转换回其原始值类型的过程,需要确保对象中确实包含该值类型的实例,否则会引发异常。 6. 动态类型(`dynamic`) - C# 4.0引入了动态类型,允许在运行时确定变量的类型,主要用于与非C#代码...
1. **可空类型转换**:非空类型与可空类型之间可以直接赋值,但反之则需要显式转换。例如,一个 `int?` 变量可以赋值给 `int` 类型,但一个 `int` 变量不能直接赋值给 `int?`,需要先进行 `GetValueOrDefault()` 或 ...
3. null 值:值类型不能为 null,除非是可空值类型(`Nullable<T>` 或 `T?`),而引用类型可以为 null。 4. 封装和继承:引用类型支持封装和继承,可以实现多态性,而值类型不支持这些高级面向对象特性。 理解C#中...