Effective C# 学习笔记(三)在类型转换上多使用 as 和 is
2011-07-02 23:12
603 查看
好处:使用 as 和is 在运行时判断类型转换是否成功,若是转换失败不会产生新的对象
使用 as 转换对象类型,若是失败会返回 null ,这时只需判断是否为null就可判断是否转换成功,否则转换就是两步判断 1. 判断转换是否成功 2. 判断是否为null
//使用 as
object o = Factory.GetObject();
// Version one:
MyType t = o as MyType;
if (t != null)
{
// work with t, it's a MyType.
}
else
{
// report the failure.
}
//强制转换
object o = Factory.GetObject();
// Version two:
try
{
MyType t;
t = (MyType)o;
// work with T, it's a MyType.
}
catch (InvalidCastException)
{
// report the conversion failure.
}
限制:as不能用于原始类型,如: int double float and so on
对于 foreach 这种 集合(所有实现了IEnumerable接口的类型)遍历操作中的类型转换的折中方案是使用 Cast<T>方法,其中T可为所有类型
IEnumerable collection = new List<int>()
{1,2,3,4,5,6,7,8,9,10};
var small = from int item in collection
where item < 5
select item;
var small2 = collection.Cast<int>().Where(item => item < 5).
Select(n => n);
使用 as 转换对象类型,若是失败会返回 null ,这时只需判断是否为null就可判断是否转换成功,否则转换就是两步判断 1. 判断转换是否成功 2. 判断是否为null
//使用 as
object o = Factory.GetObject();
// Version one:
MyType t = o as MyType;
if (t != null)
{
// work with t, it's a MyType.
}
else
{
// report the failure.
}
//强制转换
object o = Factory.GetObject();
// Version two:
try
{
MyType t;
t = (MyType)o;
// work with T, it's a MyType.
}
catch (InvalidCastException)
{
// report the conversion failure.
}
限制:as不能用于原始类型,如: int double float and so on
对于 foreach 这种 集合(所有实现了IEnumerable接口的类型)遍历操作中的类型转换的折中方案是使用 Cast<T>方法,其中T可为所有类型
IEnumerable collection = new List<int>()
{1,2,3,4,5,6,7,8,9,10};
var small = from int item in collection
where item < 5
select item;
var small2 = collection.Cast<int>().Where(item => item < 5).
Select(n => n);
相关文章推荐
- Effective C#阅读笔记-3使用is或者as代替cast做类型转换
- 《Effective C#》Item 3:使用as和is操作符来做类型转换
- Effective C# 学习笔记(九) 在你的API中避免使用类型转换运算
- 转:《Effective C#》Item 3:使用as和is操作符来做类型转换
- Effective C# 使用as和is操作符来做类型转换
- 《Effective C#》Item 3:使用as和is操作符来做类型转换
- 《Effective C#》Item 3:使用as和is操作符来做类型转换
- Effective C#:ITEM3:优先使用is或者as操作符而不是强制转换
- 写几个带继承关系的类,使用直接强转的方式,以及使用as转换, 并且练习is的类型判断
- 类型转换中as、is的使用
- C#语言学习--基础部分(十二) --堆,栈,装箱,拆箱,安全数据类型转换:as, is
- swift--使用 is 和 as 操作符来实现类型检查和转换 / AnyObject与Any的区别
- c++学习笔记:使用锋利的sstringstream完成类型转换
- (原创)c#学习笔记05--变量的更多内容01--类型转换03--使用Convert命令进行显式转焕
- Item 3: 使用 is 或 as 去做类型转换(Prefer the is or as Operators to Casts)
- 《Effective C#》读书笔记——条目3:推荐使用is或as而不是强制转换类型<C#语言习惯>
- [原创]java WEB学习笔记68:Struts2 学习之路-- 类型转换与复杂属性配合使用
- Effective C# 学习笔记(三十九) 使用Dynamic处理范型参数的运行时类型
- Effective C# 学习笔记(四十)使用Dynamic处理匿名类型参数
- C#引用类型转换,到底使用is,as还是显式强转?