bsp; Console.WriteLine("Done!");
}
严格求值策略:首先定义一个返回Int的方法
static int DoSomeThing()
{
Console.WriteLine("DoSomeThing Function Excuted");
return 7;
}
static void Stricteva luation(bool flag, int dsVal)
{
if (flag)
Console.WriteLine("dsVal result value is {0}", dsVal);
Console.WriteLine("Done!");
}
调用:Stricteva luation(false, DoSomeThing());
输出:
DoSomeThing Function Excuted
Done!
虽然flag为false,但是DoSomeThing还是被执行了,如何改变?
将第二个参数改成方法:
static void Lazyeva luation(bool flag,Func<int> dsthing)
{
if (flag)
Console.WriteLine("dsthing result value is {0}", dsthing());
Console.WriteLine("Done!");
}
调用:Stricteva luation(false, DoSomeThing);
如果flag为true,并且其中调用两次,那么DoSomeThing就会被执行两次。再次修改
static void Lazyeva luationEx(bool flag, Func<int> dsthing)
{
Lazy<int> lzDshting = new Lazy<int>(dsthing);
if (flag)
Console.WriteLine("dsthing square result value is {0}", lzDshting.Value * lzDshting.Value);
Console.WriteLine("Done!");
}
参考 http://www.cnblogs.com/yaozhenfa/category/652982.html