C# 如果函数包含同名的局部函数,如何递归调用该函数?

C# 如果函数包含同名的局部函数,如何递归调用该函数?,c#,recursion,local-functions,C#,Recursion,Local Functions,我在玩本地函数,不知道如何调用主机函数,如果它包含同名的本地函数 class Program { static void Main(string[] args) { new Test().Foo(); Console.Read(); } } class Test { public void Foo() { Console.WriteLine("Host function"); void

我在玩本地函数,不知道如何调用主机函数,如果它包含同名的本地函数

class Program
{
    static void Main(string[] args)
    {
        new Test().Foo();

        Console.Read();
    }
}

class Test
{
    public void Foo()
    {
        Console.WriteLine("Host function");

        void Foo()
        {
            Console.WriteLine("Local function");
        }

        Foo();  // This calls the local function

        Foo();  // I would like to call the host Foo() recursively here
    }
}

您可以用
这个
预先结束通话:

Foo(); // calls the local function
this.Foo(); // calls the class instance function

尽管如此,即使有这样的解决方法,仍然强烈建议使用更好的函数名来更清楚地区分两者。代码对编译器来说不能含糊不清,但对阅读它的人来说也不应该含糊不清。

我相信这只是一个普遍的好奇心,显而易见的解决办法当然是不要给局部函数和外部函数取相同的名称。@Rotem:Curtive。或者不控制函数的名称Op:唯一真正的要求是编译器清楚地知道这两个具有相似名称的函数在任何时候的含义。理想情况下,你应该投入工作,这样一开始就不存在歧义。当有疑问时,一种常见的方法是将一个类包装到您所控制的自定义类中。包装允许您重新定义类函数的任何内容—名称、签名。您甚至可以在属性中打开字段。MVVM模式大量使用Encapsulation。