看了许多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("类型转换错误");
}
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("类型转换错误");
}
解决方案 »
- 自定义控件的背景色如何设置成透明?
- C# 如何检查子窗口是否已经创建
- 关于WPF的DataGrid绑定数据问题
- asp.net 水晶报表
- 问个很小白的问题, 如何在winform 中打开一个网页?
- c#中没有整除运算符,如何实现整除功能呀?比如 5整除以2等于2
- 为什么我测量出来的字体宽度和现实出来不一样?
- 快过年了,没什么送给大家的,推荐一首英文歌吧,祝大家春节快!
- 利用TextureBrush, 为什么我的图面显示面目全非?
- 在DATAGRID中加一行作为统计页脚(WINFORM C#)
- 这种效果怎样实现,请教一下,各位高手有没有这方面的开发经历
- IDbCommand.Prepare()后命令只执行一次,那么Prepare()方法还有用吗
if(myAnimal is Cow)
{
Cow myCow = myAnimal as Cow;
myCow.Milk();
}这样更简单。
{
TextBox tb= c as TextBox;
// 如果c不属于TextBox那么c as TextBox 返回的事nuLL
//当使用强类型转换时(textbox)c 程序就会报错
}
因为 as 在转换失败的时候返回 null,值类型不能是 null。关于 as 和强制类型转换更多的比较,推荐你看C#高效编程这本书。我想说的在这本书中都有。
而用as,只需判断一下转换结果是否为null,不为null是可以拿过来直接用的。
当然as转换不能用于值类型。
if(obj is Class1) (Class1)obj.DoSomething();
它先判断obj是否是Class1,然后转换,看起来挺合理。但是,is这个运算符本来就会做一次转换,后来再转一次,就执行了两次转换;而as只执行一次。有些时候只能用强制转换
因为as只考虑引用转换以及装箱,不能拆箱,不考虑用户自定义转换。强制转换是全能型的,什么都可以。
看了你回复的帖子 到处装逼 唉 人可以贱 但不能像你这样贱
而as作为C#关键字,能处理类型的兼容而不会出现异常,这种好处是多方面的
1.性能方面来说,.net类型转换,as字符只会判断一次,而is会判断很多次(父祖级都会去一一判断),as效率高。异常的效率就不说了,更低...
2.错误捕获机制来说。try catch不是这样用的,一般try catch,是捕获预期的异常。
一般拿到所有的异常,只是最终发布程序以防万一,把异常信息输出log。书的话,C#高效编程?不会是高级编程吧?很扯蛋的,理论的东西··!推荐clr via c#,这本书不错,我个人颇觉收益