相关疑难解决方法(0)

本地功能与Lambda C#7.0

我正在研究C#7.0中的新实现,我觉得有趣的是他们已经实现了本地函数,但我无法想象一个局部函数比lambda表达式更受欢迎的场景,两者之间有什么区别.

我知道lambdas是anonymous函数,而局部函数却没有,但我无法弄清楚一个真实世界的场景,其中局部函数优于lambda表达式

任何例子都将非常感激.谢谢.

c# lambda function c#-7.0

161
推荐指数
4
解决办法
2万
查看次数

Lambda表达式是否在C#闭包中?

lambda表达式(以及程度,匿名函数)是否闭包?

我对闭包的理解是它们是被视为对象的函数,这似乎是匿名函数和Lambda表达式所做的准确表示.

称他们为封闭是否正确?我知道由于lisp方言,闭包产生(或变得流行),但它是否也是一般编程术语?

感谢您提供的任何澄清!

c# lambda

58
推荐指数
4
解决办法
2万
查看次数

为什么在调用func时会有内存分配

我有以下程序,它从两个静态方法构造一个本地Func.但奇怪的是,当我分析程序时,它分配了近百万个Func对象.为什么调用Func对象也在创建Func实例?

在此输入图像描述

public static class Utils
{
    public static bool ComparerFunc(long thisTicks, long thatTicks)
    {
        return thisTicks < thatTicks;
    }
    public static int Foo(Guid[] guids, Func<long, long, bool> comparerFunc)
    {
        bool a = comparerFunc(1, 2);
        return 0;
    }
}
class Program
{
    static void Main(string[] args)
    {
        Func<Guid[], int> func = x => Utils.Foo(x, Utils.ComparerFunc);
        var guids = new Guid[10];
        for (int i = 0; i < 1000000; i++)
        {
            int a = func(guids);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# performance delegates closures garbage-collection

47
推荐指数
1
解决办法
2964
查看次数

为委托分配本地功能

在C#7.0中,您可以声明本地函数,即生活在另一个方法中的函数.这些本地函数可以访问周围方法的局部变量.由于局部变量仅在调用方法时存在,我想知道是否可以将一个局部函数分配给一个委托(它可以比这个方法调用寿命更长).

public static Func<int,int> AssignLocalFunctionToDelegate()
{
    int factor;

    // Local function
    int Triple(int x) => factor * x;

    factor = 3;
    return Triple;
}

public static void CallTriple()
{
    var func = AssignLocalFunctionToDelegate();
    int result = func(10);
    Console.WriteLine(result); // ==> 30
}
Run Code Online (Sandbox Code Playgroud)

它确实工作!

我的问题是:为什么这有效?这里发生了什么?

c# c#-7.0

13
推荐指数
2
解决办法
1504
查看次数