xiaolizi007
12/14/2016 - 6:27 AM

OfType和Cast的区别,前者不会引起异常,后者会引起异常,都是转换成IEnunber<T>的泛型

OfType和Cast的区别 #csharp

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqCastOfType
{
    class Program
    {
        //OfType和Cast的区别,前者不会引起异常,后者会引起异常,都是转换成IEnunber<T>的泛型
        static void Main(string[] args)
        {
            //两者不同之处在于OfType函式使用as运算子
            //若元素型别无法转为指定型别,则略过该元素
            //Cast函式则是使用Convert.ChangeType函式转型
            //当元素型别无法透过Convert.ChangeType函式转型至指定型别时,即抛出例外
            //OfType不会引起异常,Cast会引起异常
            try
            {
                //不会引起异常
                LinqOfType();
                //会引起异常
                LinqCast();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadKey();

        }
        /// <summary>
        ///  //linq cast 将以前版本的集合转换为IEnumerable<T>
        /// </summary>
        private static void LinqCast()
        {

            ArrayList arraylist = new ArrayList();
            arraylist.Add("111");
            arraylist.Add("222333");
            arraylist.Add(333333333);
            IEnumerable<string> lists = arraylist.Cast<string>().Where(n => n.Length < 8);
            foreach (string list in lists)
            {
                Console.WriteLine(list);
            }
        }
        /// <summary>
        ///  //linq OfType 将以前版本的集合转换为IEnumerable<T>
        /// </summary>
        private static void LinqOfType()
        {
            ArrayList arraylist = new ArrayList();
            arraylist.Add("111");
            arraylist.Add("222333");
            arraylist.Add(333333333);
            IEnumerable<string> lists = arraylist.OfType<string>().Where(n => n.Length < 8);
            foreach (string list in lists)
            {
                Console.WriteLine(list);
            }
        }
    }
}