首页 > 解决方案 > 无法在另一个方法中使用两种方法

问题描述

我在一个较大的方法中插入两种方法时遇到了麻烦。另一个论坛告诉我 c# 8 支持这一点,但即使是我的编译器的最新版本也只支持最高版本 5。有人知道如何提供帮助吗?我是初学者,将不胜感激。让我知道我是否可以提供更多信息。

该程序只是对基于文本的游戏的测试,玩家输入他们的名字然后他们开始收集硬币,我在每个结果结束时运行 coincheck() 以使其可重复,但余额变量会每次重置,我终于通过将这两种方法都放入 main 找到了可能的解决方法,但我的编译器似乎不喜欢那样。

using System;

// namespace declaration 
namespace test {

    // Class declaration 
    class Geeks {


        // Main Method 
        static void Main()
        {

            int balance = 0;

            static void namecheck()
            {
                Console.Clear();
                Console.WriteLine("What is your name?");


                string name;
                name = Console.ReadLine();
                Console.WriteLine("Hello {0}", name);
                coincheck();
            }

            static void coincheck()
            {
                string coininp;

                Console.WriteLine("Type 'collect' to pick up a coin and 'wallet' to check your wallet.");
                coininp = Console.ReadLine();
                if (coininp == "collect")
                {
                    balance = balance + 1;
                    Console.WriteLine("you found a coin!");
                    coincheck();
                }
                if (coininp == "wallet")
                {
                    Console.WriteLine("you have {0} coins in your wallet", balance);
                    coincheck();
                }
                else
                {
                    Console.WriteLine("Invalid Input");
                    coincheck();
                }
            }
        }
    }
}

在此处输入图像描述

标签: c#methodscompiler-errors

解决方案


仅 C# 版本 7 或更高版本支持本地函数。这在早期版本中根本是不可能的。

最接近的方法是使用匿名方法,允许存在于另一个方法中例如:

void M1()
{
    Action M2 = () => Console.WriteLine("M2");

    // Now you can invoke the delegate representing your anonymous method
    // as if it were a nested method:
    M2();
}

这有时是合适的,通常出于相同的原因,本地函数是:隔离仅在本地上下文中严格有用的代码。但除了最简单的场景,我不推荐它。

在您的示例中,方法主体很大,我只是将这些方法作为类中的常规方法放在外面。如果您确实必须将它们作为本地函数,那么您需要升级到 C# 7 或更高版本。


推荐阅读