日期:2014-05-18  浏览次数:20733 次

为什么用as进行类型转换被那么推崇?
看了许多C#的书,都说用as运行符进行类型转换有多好,但我觉得catch也挺好的啊。以下两种方式到底谁好,好在哪呢?

// as的方式
Cow myCow = myAnimal as Cow;
if (myCow != null)
{
  myCow.Milk();
}
else
{
  Console.WriteLine("类型转换错误");
}

// try-catch的方式
try
{
  Cow myCow = myAnimal as Cow;
  myCow.Milk();
}
catch (Exception e)
{
  Console.WriteLine("类型转换错误");
}

------解决方案--------------------
首先,ls的说法是错误的。try catch根本不会“抛出异常”。

as 操作没有办法转换值类型。
因为 as 在转换失败的时候返回 null,值类型不能是 null。

关于 as 和强制类型转换更多的比较,推荐你看C#高效编程这本书。我想说的在这本书中都有。


------解决方案--------------------
探讨

首先,ls的说法是错误的。try catch根本不会“抛出异常”。

as 操作没有办法转换值类型。
因为 as 在转换失败的时候返回 null,值类型不能是 null。

关于 as 和强制类型转换更多的比较,推荐你看C#高效编程这本书。我想说的在这本书中都有。