Item 3:Prefer the is or as Operation to class
2005-08-12 23:12
465 查看
这个Item鼓励大家多是用is/as,除非的在不得已的情况下才是用原始的强制的类型转换
值得注意的地方:
as / is:作类型转换时,是检查其转换对象的runtime-type,它不会执行任何用户自定的操作。在转换时其runtime-type必须与目标类型相同,或是其继承自目标类型。
as:不能用于value type,因为任何value type不能为null,而当as失败时返回null
cast:做类型转换时,是检查去转换对象的compile time-type,他执行用户自定的转换操作。
public class SecondType
//version 1
object o = Factory.GetObject() //返回SecondType
MyType t= o as MyType;
if(null != t)
else
//version 2
try
catch
}
很可惜的告诉你两个转换都失败。
我认为原因是:
version 1:虽然o的runtime-type是SecondType,但很可惜as不会执行用户自定义操作
version 2:虽然cast会执行用户自定义的操作,但是o的compile time-type是object,他没有定义到MyType类型的转换
值得注意的地方:
as / is:作类型转换时,是检查其转换对象的runtime-type,它不会执行任何用户自定的操作。在转换时其runtime-type必须与目标类型相同,或是其继承自目标类型。
as:不能用于value type,因为任何value type不能为null,而当as失败时返回null
cast:做类型转换时,是检查去转换对象的compile time-type,他执行用户自定的转换操作。
public class SecondType
//version 1
object o = Factory.GetObject() //返回SecondType
MyType t= o as MyType;
if(null != t)
else
//version 2
try
catch
}
很可惜的告诉你两个转换都失败。
我认为原因是:
version 1:虽然o的runtime-type是SecondType,但很可惜as不会执行用户自定义操作
version 2:虽然cast会执行用户自定义的操作,但是o的compile time-type是object,他没有定义到MyType类型的转换
相关文章推荐
- Item 3: 使用 is 或 as 去做类型转换(Prefer the is or as Operators to Casts)
- Item 3: Prefer the is or as Operators to Casts(Effective C#)
- Item 3: Prefer the is or as Operators to Casts
- Effective C# Item 3: Prefer the is or as Operators to Casts
- Effective C# 3:Prefer the is or as Operators to cast
- 对象的当前状态使该操作无效 or SPListItem Update Operation is not valid due to the current state of the object
- Prefer the is or as Operators to Casts - Effective C#学习笔记(3)
- 对象的当前状态使该操作无效 or SPListItem Update Operation is not valid due to the current state of the object
- .Net 连接池的配置Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.”
- mySql主从配置出错:The server is not configured as slave; fix in config file or with CHANGE MASTER TO
- Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify pr
- Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
- Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces
- Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
- Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify pr
- Spring3.x错误---- Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
- Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
- Using the isBranch() method to determine if a Tree item is a branch or leaf
- Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
- Cannot proxy target class because CGLIB is not available. Add CGLIB to the class path or specify pr