浅学CLR via C#笔记之类型转换
2024-08-27 03:12:34
我们都知道CLR最重要的一个特性就是类型安全,它在运行时就知道对象类型。
但我们会经常用到将一种类型转换成另一种类型,CLR也允许将对象转成他的实际类型,或者是它的基类型。
在C#中,支持隐士转换成它的基类型。
类型转换会用到以下方式:
public class EntityBase
{
public int Id {get; set;}
}
public class User
{
public string Name {get; set;}
} .....
public static void Main()
{
var user = new User();
var entity = user; // 隐士转换
Object obj = user;
var user2 = (User) obj; // 显示转换
var user3 = obj as User; // as操作符转换
}
其中 (User) obj 用了强制转换,如果原始类型不是User的时候,会抛出异常。
而obj as User 会先判断类型,然后才会转换,如果原始类型不是User的时候,会返回null,反而不会抛出异常。
有的时候为了处理异常,需要加一些判断,比如使用如下判断语句,先判断类型是否正确:
if(obj is User){
var user2 = (User) obj;
// or
var user3 = obj as User;
}
这样也可以实现,但是我们可以换另外一种给方式去写,会更简单。
因为对obj as User而言 会先判断类型,然后才会转换,那这样的话就会跟外层的is语句有重复判断的部分,在单条语句不会引起很大的性能方面的损耗,但是如果在一个比较大的循环语句中这样大量的重复判断,性能损耗将是一个很大的影响。
var user3 = obj as User;
if(user3 is null)
{
// ....
}
如上写法,依据as语法的特性,判断返回结果的方式。
最新文章
- Python新建动态命名txt文件
- TweenMax学习一
- 根据SQL Server排序规则创建顺序GUID
- css margin 参数
- servlet等一些砸碎的
- Nginx安装(zhuan)
- Tools之FindBugs
- HDU 1024 (不重叠m段最大和) Max Sum Plus Plus
- 安卓环境搭建(1)hellow world
- docker 学习笔记20:docker守护进程的配置与启动
- linux命令readlink
- 转 Android中通过广播方式调起第三方App
- 使用Pushlet将消息从服务器端推送到客户端
- xx-net 使用方式
- C++数据
- PHP 高级过滤器
- GIT的使用(Gitlab上传本地仓库代码,Webstorm修改更新)
- vim常用命令行备忘总结
- mui 动态加载数据出现的问题处理 (silder轮播组件 indexedList索引列表 下拉刷新不能继续加载数据)
- visual studio 加入zen-codding
热门文章
- ActiveMQ持久化
- PHP使用MongoDB类操作MongoDB数据库总结
- Python中产生随机数
- mybatis xml <;choose>;标签使用
- Centos7 手动编译 RabbitMQ ,并安装php amqp
- 转 mysql 文件系统空间满了
- 报错:java.lang.AbstractMethodError: nl.techop.kafka.KafkaHttpMetricsReporter.logger()Lcom/typesafe/scalalogging/Logger;
- Selenium登录126邮箱,chrome定位不到账号输入框解决办法
- Python赋值、浅拷贝、深拷贝
- jenkins最新版下载安装