欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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类型,如果是再进行转换。

c# "As" 与 "Is"效率 (原发布csdn 2017-10-07 11:49:18)

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 变量仅进行一次计算。

c# "As" 与 "Is"效率 (原发布csdn 2017-10-07 11:49:18)c# "As" 与 "Is"效率 (原发布csdn 2017-10-07 11:49:18)

测试例子:

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();
    }
}

测试结果c# "As" 与 "Is"效率 (原发布csdn 2017-10-07 11:49:18)

测试100000次,对于值类型,is>as;对于引用类型,as>is