当前位置:  开发笔记 > 编程语言 > 正文

C#lambda表达式和惰性求值

如何解决《C#lambda表达式和惰性求值》经验,为你挑选了0个好方法。

lambda表达式的一个优点是,只有在需要结果时才需要计算函数.

在下面(简单)示例中,仅在编写器存在时才评估文本函数:

public static void PrintLine(Func text, TextWriter writer)
{
    if (writer != null)
    {
        writer.WriteLine(text());
    }
}

不幸的是,这使得使用代码有点难看.你不能用常量或变量来调用它

PrintLine("Some text", Console.Out);

并且必须这样称呼它:

PrintLine(() => "Some text", Console.Out);

编译器无法从传递的常量"推断"无参数函数.有没有计划在未来的C#版本中改进这一点,还是我错过了什么?

更新:

我自己发现了一个肮脏的黑客:

    public class F
    {
       private readonly T value;
       private readonly Func func;

       public F(T value) { this.value = value; }
       public F(Func func) {this.func = func; }

       public static implicit operator F(T value)
       {
            return new F(value);
       }

       public static implicit operator F(Func func)
       {
           return new F(func);
       }

       public T Eval()
       {
           return this.func != null ? this.func() : this.value;
       }
}

现在我可以将函数定义为:

public static void PrintLine(F text, TextWriter writer)
{
    if (writer != null)
    {
        writer.WriteLine(text.Eval());
    }
}

并用函数或值来调用它.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有