十一長假就要過去了,今年假期沒有回家,一個人閑著無聊就在看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();
}
}
測試結果