如何在c#中的另一个函数内创建函数,是否可能?

rat*_*tty 13 c# methods

是否可以在C#中的另一个函数内创建一个函数?如果是这样,怎么办呢?

Eil*_*lon 17

这当然是可能的.

您可以在其他方法中创建作为函数的委托.这适用于C#2.0:

public void OuterMethod() {
    someControl.SomeEvent += delegate(int p1, string p2) {
        // this code is inside an anonymous delegate
    }
}
Run Code Online (Sandbox Code Playgroud)

这适用于lambdas的新版本:

public void OuterMethod() {
    Func<int, string, string> myFunc = (int p1, string p2) => p2.Substring(p1)
}
Run Code Online (Sandbox Code Playgroud)


pri*_*e23 11

你可以在c#7中做到这一点(需要VS 2017)

static void Main(string[] args)
{
    int fib0 = 1; //!
    int Fib(int n) => (n < 2) ? fib0 : Fib(n - 1) + Fib(n - 2);

    Console.WriteLine(Fib(7));
    Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/local-functions


Lui*_*jon 9

从C#7.0开始,你可以这样做:

 public static void SlimShady()
 {
     void Hi([CallerMemberName] string name = null)
     {
         Console.WriteLine($"Hi! My name is {name}");
     }

     Hi();
 }
Run Code Online (Sandbox Code Playgroud)

这被称为本地功能,这正是您所寻找的.

我从这里拿了这个例子,但是可以在这里这里找到更多的信息.