c# "As" 与 "Is"效率 (原发布csdn 2017-10-07 11:49:18)
程序员文章站
2022-06-19 20:04:26
十一长假就要过去了,今年假期没有回家,一个人闲着无聊就在看C 语言规范5.0中文版。昨天看了 is运算符和 as运算符,平时项目中也有用到这两种符号,对于其效率也没有进行比较过,趁着假期有空,先看下效率。 is 常用法: 先判断obj是不是T类型,如果是再进行转换。 as 常用法: 如果obj不是T ......
十一长假就要过去了,今年假期没有回家,一个人闲着无聊就在看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 obj = i + 1; if (obj 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 obj = i + 1; testinttype = obj 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 obj = testclass; if (obj is testclass) { testclass objtest = (testclass)obj; } } sw_timer.stop(); console.writeline("is运算{0}次所需时间,{1}ticks.", num, sw_timer.elapsedticks); sw_timer.restart(); for (int i = 0; i < num; i++) { object obj = testclass; testclass objtest = obj as testclass; if (objtest != null) { } } sw_timer.stop(); console.writeline("as运算{0}次所需时间,{1}ticks.", num, sw_timer.elapsedticks); console.readkey(); } }
测试结果