C#中is和as用法实例分析

本文实例讲述了C#中is和as的用法,对加深is与as用法的理解有一定的帮助借鉴作用。具体如下:

现来看个例子:

public class User
{
}
public class Group
{
}
class Program
{
    static void Main(string[] args)
    {
      Object oUser = new User();
      Object user = (Group)oUser;
    }
}

这样会报错(InvalidCastException),由于C#安全机制,它会去判断一次。我们这里做了非法的转换。

Is做判断:is说判断对象是不是你要的那个类型(这里说User)

修改后的示例如下:

class Program
{
    static void Main(string[] args)
    {
      Object obj = new User();
      if (obj is User)
      {
        User user = (User)obj;
      }
    }
}

这样的话,我们在obj is User这里做了一次判断,我们刚才说了,(User)obj这样的操作(强制转换)编译器还会做一次操作,这样就有性能上面的消耗。来看看AS。

AS操作:如果说改对象就转换,不是则返回null.

class Program
{
    static void Main(string[] args)
    {

      Object obj = new User();

      User user = obj as User;
      if(user==null)
      {
        // handle error
        //....
      }
    }
}

注:个人比较喜欢用As,简化了操作也提高了性能,做一个NULL判断,直接处理这种异常也说很方便。

希望本文所述方法对大家的C#程序设计能有一定的帮助与借鉴价值。

(0)

相关推荐

  • C# List<T> Contains<T>()的用法小结

    泛型List<T>中有一个比较列表是否已包含对象的方法Contains<T>(),今天在网上搜了一个用法,记录下来,备查. 要用此方法比较我们的自定义对象,首先要有一个比较器, 要注意的是,这里的比较器是实现IEqualityComparer<T>接口的,不要写成IComparer<T>. 如下: 复制代码 代码如下: /// <summary>    /// 描    述:弹出模型对象列表比较器(根据ID比较)    /// </summ

  • C#中AS和IS关键字的用法

    在程序中,进行类型转换是常见的事,C#支持基本的强制类型转换方法,例如: Object obj1 = new NewType(); NewType newValue = (NewType)obj1; 这样强制转换的时候,这个过程是不安全的,因此需要用try-catch语句进行保护,这样一来,比较安全的代码方式应如下所示: Object obj1 = new NewType(): NewType newValue = null: try { newValue = (NewType)obj1: }

  • C#中Array与ArrayList用法及转换的方法

    ArrayList与Array的区别概述 ArrayList 是数组的复杂版本.ArrayList 类提供在大多数 Collections 类中提供但不在 Array 类中提供的一些功能.例如: Array 的容量是固定的,而 ArrayList 的容量是根据需要自动扩展的.如果更改了 ArrayList.Capacity 属性的值,则自动进行内存重新分配和元素复制. ArrayList 提供添加.插入或移除某一范围元素的方法.在 Array 中,您只能一次获取或设置一个元素的值. 使用 Syn

  • C# List<T>的用法小结

    所属命名空间:System.Collections.Generic     public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable List<T>类是 ArrayList 类的泛型等效类.该类使用大小可按需动态增加的数组实现 IList<T> 泛型接口. 泛型的好处: 它为使用c#语言编写面向对象程

  • 详解C#中的Async和Await用法

    这篇文章由Filip Ekberg为DNC杂志编写. 自跟随着.NET 4.5 及Visual Studio 2012的C# 5.0起,我们能够使用涉及到async和await关键字的新的异步模式.有很多不同观点认为,比起以前我们看到的,它的可读性和可用性是否更为突出.我们将通过一个例子来看下它跟现在的怎么不同. 线性代码vs非线性代码 大部分的软件工程师都习惯用一种线性的方式去编程,至少这是他们开始职业生涯时就被这样教导.当一个程序使用线性方式去编写,这意味着它的源代码读起来有的像Figure

  • c#中switch case的用法实例解析

    本文实例实现C#以一个收银付费的小程序演示switch case语法如何使用,读入用户选择,把用户的选择赋值给变量n,再根据用户的输入提示付费信息,这种情况使用switch case语法就非常合适了,对于C#的初学者来说,对一些基础技巧的使用是应该非常熟悉的. 具体代码如下: using System; using System.IO; class SwitchApp { public static void Main() { //显示提示 Console.WriteLine("三种选择型号:

  • C#中哈希表(Hashtable)的介绍及简单用法

    key通常可用来快速查找,同时key是区分大小写:value用于存储对应于key的值.Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对 <BR><BR><BR>在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value); 在哈希表中去除某个key/value键值对:HashtableObject.Remove(key); 从哈希表中移除所有元素

  • 关于C#泛型列表List<T>的基本用法总结

    示例代码如下:namespace SampleListT{  class Program  {      static void Main(string[] args)      {//using System.Collections.Generic; 命名空间中的List<T>//using System.Collections; 命名空间中的ArrayList  //都实现了列表集合,一个是泛形集合,一个是非泛型的//下面我们将Person对象加到集合中 Person p1 = new P

  • C#中JavaScriptSerializer帮助类用法实例

    本文实例讲述了C#中JavaScriptSerializer帮助类用法.分享给大家供大家参考.具体如下: 关键代码如下: 复制代码 代码如下: using System; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Web.Script.Serialization; namespace YanZhiwei.DotNet3._5.Utilities.Common {    

  • C# List中FindAll用法的一些简单示例

    如下所示: 复制代码 代码如下: using System;using System.Collections.Generic; public partial class List : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {        CreateList();    } private void CreateList()     {        List<string>

随机推荐