当前位置: 移动技术网 > IT编程>开发语言>c# > 浅学CLR via C#笔记之类型转换

浅学CLR via C#笔记之类型转换

2019年08月16日  | 移动技术网IT编程  | 我要评论
我们都知道CLR最重要的一个特性就是类型安全,它在运行时就知道对象类型。 但我们会经常用到将一种类型转换成另一种类型,CLR也允许将对象转成他的实际类型,或者是它的基类型。 在C#中,支持隐士转换成它的基类型。 类型转换会用到以下方式: 其中 (User) obj 用了强制转换,如果原始类型不是Us ...

我们都知道clr最重要的一个特性就是类型安全,它在运行时就知道对象类型。

但我们会经常用到将一种类型转换成另一种类型,clr也允许将对象转成他的实际类型,或者是它的基类型。

在c#中,支持隐士转换成它的基类型。

类型转换会用到以下方式:

 1 public class entitybase
 2 {
 3     public int id {get; set;}
 4 }
 5 public class user
 6 {
 7     public string name {get; set;}
 8 }
 9 
10 .....
11 public static void main()
12 {
13      var user = new user();
14      var entity = user;  // 隐士转换
15      object obj = user;
16      var user2 = (user) obj; // 显示转换
17      var user3 = obj as user; // as操作符转换      
18 } 

其中 (user) obj 用了强制转换,如果原始类型不是user的时候,会抛出异常。

obj as user 会先判断类型,然后才会转换,如果原始类型不是user的时候,会返回null,反而不会抛出异常。

有的时候为了处理异常,需要加一些判断,比如使用如下判断语句,先判断类型是否正确:

1 if(obj is user){
2     var user2 = (user) obj;
3     // or
4     var user3 = obj as user;
5 }

这样也可以实现,但是我们可以换另外一种给方式去写,会更简单。

因为对obj as user而言 会先判断类型,然后才会转换,那这样的话就会跟外层的is语句有重复判断的部分,在单条语句不会引起很大的性能方面的损耗,但是如果在一个比较大的循环语句中这样大量的重复判断,性能损耗将是一个很大的影响。

1 var user3 = obj as user;
2 if(user3 is null)
3 {
4      // ....
5 }

如上写法,依据as语法的特性,判断返回结果的方式。

 

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网