C#中的AS、IS运算符与强制类型转换

        as和强制转换之间最大的区别就在于如何处理用户自定义的转换。操作符 as和 is 都只检查被转换对象的运行时类型,并不执行其他的操作。如果被转换对象的运行时类型既不是所转换的目标类型,也不是其派生类型,那么转型将告失败。但是强制转型则会使用转换操作符来执行转型操作,这包括任何内建的数值转换(如:long转int)。

  一般情况我们应该先考虑使用as进行类型转换,然后再考虑使用is,最后才考虑使用强制转换。
如果你使用as来转换数据,那么用is来做检测是不必要的。只用检测返回类型是否为null就行了
is和as一样,都是类型转换安全的,它们在任何时候都不会在转换时发生异常,因此可以先用is来安全的判断一下数据类型。与as不同的时,is只是做类型检测并返回逻辑值,不做转换。

        as不能用于值类型,这是因为值类型不能为null。像这种情况我们应该使用强制类型转换。
eg:在代码中

double i = 12;
int j = i as int;
Error 1 The as operator must be used with a reference type or nullable type ('int' is a non-nullable value type) 

				
时间: 2024-09-11 03:25:44

C#中的AS、IS运算符与强制类型转换的相关文章

C#中的AS、IS运算符和强制类型转换简介

as和强制转换之间最大的区别就在于如何处理用户自定义的转换.操作符 as和 is 都只检查被转换对象的运行时类型,并不执行其他的操作.如果被转换对象的运行时类型既不是所转换的目标类型,也不是其派生类型,那么转型将告失败.但是强制转型则会使用转换操作符来执行转型操作,这包括任何内建的数值转换(如:long转int). 一般情况我们应该先考虑使用as进行类型转换,然后再考虑使用is,最后才考虑使用强制转换. 如果你使用as来转换数据,那么用is来做检测是不必要的.只用检测返回类型是否为null就行了

Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍_基础知识

下面就来详细说一说 Javascript 中 Boolean.Nnumber.String 强制类型转换的区别. 我们知道 Boolean(value) 是把值转换成Boolean类型,Nnumber(value) 是把值转换成数字(整型或浮点数),而 String(value) 是把值转换成字符串. 先来分析下Boolean,Boolean在转换值为"至少有一字符的字符串"."非0的数字"或"对象"的情况下返回true:在转换值为"空

link中为什么变量可以强制类型转换,但是对象就不可以?

问题描述 link中为什么变量可以强制类型转换,但是对象就不可以? link中为什么变量可以强制类型转换,但是对象就不可以? 解决方案 对象也可以强制类型转换,但是能否转换成功取决于: 转换的目标类型必须是对象的实际类型或者它的基类类型: 或者,转换的类型实现了显式强制类型转换运算符.

c++中四种强制类型转换及区别对比

C++四种强制类型 reinterpret_cast<目标类型>(原类型变量)//重解释类型转换  dynamic_cast<new_type>(expression)//动态类型转换  static_cast<new_type>(expression)//静态类型转换  const_cast<new_type>(expression)//返回一个指向非常量的指针   1.const_cast:常量指针被转化成非常量的指针,并且仍然指向原来的对象:常量引用被

C++中4种强制类型转换的区别总结_C 语言

前言 使用标准C++的类型转换符:static_cast.dynamic_cast.reinterpret_cast和const_cast. const_cast,字面上理解就是去const属性. static_cast,命名上理解是静态类型转换.如int转换成char. dynamic_cast,命名上理解是动态类型转换.如子类和父类之间的多态类型转换. reinterpreter_cast,仅仅重新解释类型,但没有进行二进制的转换. 一.static_cast 用法:static_cast

Flash AS3.0中is,as运算符

运算 (1) is运算符 在AS3.0新增加的is运算符,主要功能是判断一个变量或者等式是不是等于给定的数据类型,在以前的版本中,有instanceof来实现相同的功能. 但是is 运算符可以帮助我们确定数据类型,还可以判断类的继承关系,包括对于接口的继承执行. 可以看如下实例: var mySprite:Sprite = new Sprite();  trace(mySprite is Sprite); //output:true  trace(mySprite is DisplayObjec

Django中实现点击图片链接强制直接下载的方法

  本文实例讲述了Django中实现点击图片链接强制直接下载的方法.分享给大家供大家参考.具体分析如下: 当用户点击图片连接时,默认为在浏览器中直接开打图片,这段代码可以让图片链接变成下载 这段代码也非常适合下载大文件,基本不会消耗内存,每次只读取一部分数据到内存,然后提供下载 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def Download(request): def readFile(fn, buf_size=262144): f = open

详解C++编程中的单目运算符重载与双目运算符重载_C 语言

C++单目运算符重载 单目运算符只有一个操作数,如!a,-b,&c,*p,还有最常用的++i和--i等.重载单目运算符的方法与重载双目运算符的方法是类似的.但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数,如果运算符重载函数作为成员函数,则还可省略此参数. 下面以自增运算符"++"为例,介绍单目运算符的重载. [例] 有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算.要求输出分和秒的值. #

浅谈Java中强制类型转换的问题_java

为了更好的理解我们先看下面的例子: package com.yonyou.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * 测试类 * @author * @创建日期 2016-5-31 */ public class Test{ public static void main(String[] args) { List<String> list=new Array