c# "As" 与 "Is"效率
来源:互联网 发布:java 获取服务器ip 编辑:程序博客网 时间:2024/05/18 00:03
十一长假就要过去了,今年假期没有回家,一个人闲着无聊就在看C#语言规范5.0中文版。昨天看了 is运算符和 as运算符,平时项目中也有用到这两种符号,对于其效率也没有进行比较过,趁着假期有空,先看下效率。
is 常用法:
if(obj is T){ T value = (T) obj;}
先判断obj是不是T类型,如果是再进行转换。
as 常用法:
T value = obj as T;if(value !=null){}
如果obj不是T类型,value=null;如果是value=(T)obj。
expression as type 等同于expression is type ? (type)expression : (type)null 但 expression 变量仅进行一次计算。
测试例子:
class TestClass { } class Program { static Stopwatch sw_Timer = new Stopwatch(); const int NUM = 100000; static int? TestIntType; static TestClass testClass = new TestClass(); static void Main() { Console.WriteLine("值类型测试."); sw_Timer.Restart(); for (int i = 0; i < NUM; i++) { object obj1 = i + 1; if (obj1 is int) { TestIntType = (int?)obj1; } } sw_Timer.Stop(); Console.WriteLine("Is运算{0}次所需时间,{1}Ticks.", NUM, sw_Timer.ElapsedTicks); sw_Timer.Restart(); for (int i = 0; i < NUM; i++) { object obj2 = i + 1; TestIntType = obj2 as int?; if (TestIntType != null) { } } sw_Timer.Stop(); Console.WriteLine("As运算{0}次所需时间,{1}Ticks.", NUM, sw_Timer.ElapsedTicks); Console.WriteLine("引用类型测试."); sw_Timer.Restart(); for (int i = 0; i < NUM; i++) { object obj3 = testClass; if (obj3 is TestClass) { TestClass obj4 = (TestClass)obj3; } } sw_Timer.Stop(); Console.WriteLine("Is运算{0}次所需时间,{1}Ticks.", NUM, sw_Timer.ElapsedTicks); sw_Timer.Restart(); for (int i = 0; i < NUM; i++) { object obj5 = testClass; TestClass obj6 = obj5 as TestClass; if (obj6 != null) { } } sw_Timer.Stop(); Console.WriteLine("As运算{0}次所需时间,{1}Ticks.", NUM, sw_Timer.ElapsedTicks); Console.ReadKey(); } }
测试结果
测试100000次,对于值类型,is>as;对于引用类型,as>is
阅读全文
0 0
- c# "As" 与 "Is"效率
- C# AS与Is
- C# 中 is 与 as
- c# is与as的区别
- C# as与is的用法
- GetType与C#关键字typeof ,is,as
- C#中as与is的用法
- C#中as与is的用法
- C# as 和 is
- C# as和is
- C# is和as
- C# is as
- is 和 as 运算符的作用与区别 c#
- C#中的AS、IS运算符与强制类型转换
- C#接口实现& is和as的含义与使用
- C#中is与as的区别分析
- C#中is与as的区别分析
- is与as
- Mac和Windows解决端口别占用的指令
- linux+php7+swoole搭建及时通讯
- Linux 查看ip 端口 进程的几种方法
- Linux软件
- Android笔记
- c# "As" 与 "Is"效率
- 那些不正经的前端笔试题
- 如何删除ArrayList中的重复元素
- maven中出现java.lang.ClassNotFoundException: org.apache.http.entity.mime.content.ContentBody
- 扑克牌顺子java实现
- Java简单使用Redis.
- 窗体间和自定义控件的传值
- 树状数组入门
- JAR概念和jar命令