C# 我的方法需要对象引用吗?

C# 我的方法需要对象引用吗?,c#,C#,我必须制作一个程序,生成彩票,然后检查是否有中奖者。我甚至调用我的方法都有问题,因为它只是一个简单的菜单函数 这就是错误: 错误1非静态字段需要对象引用, 方法或属性 我不确定哪里出了问题,但我认为这与能见度有关 我曾尝试将一些函数更改为publicstatic,但没有成功 class Program { bool quitFlag = false; SortedSet<int> winningNumbers = new SortedSet<int>()

我必须制作一个程序,生成彩票,然后检查是否有中奖者。我甚至调用我的方法都有问题,因为它只是一个简单的菜单函数

这就是错误:

错误1非静态字段需要对象引用, 方法或属性

我不确定哪里出了问题,但我认为这与能见度有关

我曾尝试将一些函数更改为publicstatic,但没有成功

class Program
{

    bool quitFlag = false;
    SortedSet<int> winningNumbers = new SortedSet<int>();
    List<CTicket> ticketList = new List<CTicket>();

    static void Main(string[] args)
    {

        DoMenu();   
    }

    public static void GenerateTickets(List<CTicket> l)
    {

        Random Rand = new Random();

        for(int i=0; i <1000; i++)
        {
            SortedSet<int> num = new SortedSet<int>();

            do
            {

                num.Add(Convert.ToInt32(Rand.Next(1,42)));
            }
            while(num.Count <=6);

            CTicket ticket = new CTicket(i,num);
            l.Add(ticket);
            ticket.printTicket();
        }
    }

    public static void DrawWinningNumbers(SortedSet<int> winningNumbers)
    {

        for(int i=1; i <6; i++)
        {

            Random Rand = new Random();
            winningNumbers.Add(Convert.ToInt32(Rand.Next(1,42)));

            while(winningNumbers.Count <=6);
            Console.Write("The winning numbers are: {");

            foreach (int x in winningNumbers)
            {
                Console.Write(x + ", ");
            }

            Console.WriteLine();
        }
    }

    void DoQuit()
    {

        quitFlag = true;
    }

    int ShowMenu()
    {

        int option;

        Console.WriteLine("\t-------------------------------------------------\n");
        Console.WriteLine( "\t\t\t Queue Application\n\n");
        Console.WriteLine("\t1. \tGenerate tickets\n");
        Console.WriteLine("\t2. \tDisplay all tickets\n");
        Console.WriteLine("\t3. \tGenerate Winning Numbers\n");
        Console.WriteLine("\t4. \tPrint queue\n");
        Console.WriteLine("\t5. \tReverse queue\n");
        Console.WriteLine("\t6. \tExit\n");

        option = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine();
        Console.WriteLine();
        return option;
    }

    public static void DoMenu()
    {

        do
        {
            int option;

            option = ShowMenu();

            switch (option)
            {
                case 1:
                    GenerateTickets(ticketList);
                    //system("cls");
                    break;
                case 2:
                    //system("cls");
                    break;
                case 3:
                    DrawWinningNumbers(winningNumbers);
                    //system("cls");
                    break;
                case 4:
                    break;
                case 5:
                    //system("cls");
                    break;
                case 6:
                    DoQuit();
                    break;
                default:
                    //system("cls");
                    Console.WriteLine("invalid option!\n");
                    break;
            }
        } while (quitFlag != true);
    }
}
类程序
{
bool-quitsflag=false;
SortedSet WinningNumber=新的SortedSet();
List ticketList=新列表();
静态void Main(字符串[]参数)
{
多梅努();
}
公共静态无效生成器(列表l)
{
Random Rand=新的Random();

对于(int i=0;i错误应该是明确的-您正在从静态方法访问非静态项(
quitfag
winningNumbers
ticketList


将上面的项更改为
静态
(如果它们应该由
程序
类的所有实例共享),或者将方法设置为非静态,并在
程序
的实例上调用它。错误应该是清楚的-您正在访问非静态项(
quitFlag
winningNumbers
ticketList
)来自静态方法


将上面的项目更改为
静态
(如果它们应该由
程序
类的所有实例共享),或将方法设置为非静态,并在
程序的实例上调用它

我已将代码上载到那里。我尝试将DoMenu函数设置为公共静态无效,但没有帮助。请不要链接到代码的图像。将代码插入问题中,并使用格式化按钮
{}
将其格式化为代码。请将您的代码放入问题中。也请搜索错误,您将获得大量解释问题的论坛。如果您不知道静态属性/方法和实例属性/方法之间的区别,您就太超前了。停下来。通过C#购买CLR副本。阅读它。它不会花费您超过一两天。我在那里上传了代码。我尝试过将DoMenu函数设置为public static void,但没有帮助。请不要链接到代码的图像。将代码插入到问题中,并使用格式化按钮
{}
将其格式化为代码。请将您的代码放入问题中。也请搜索错误,您将获得大量解释问题的论坛。如果您不知道静态属性/方法和实例属性/方法之间的区别,您就太超前了。停下来。通过C#购买CLR副本。阅读它。它不会花费您超过一两天。谢谢您的回复。我将所有项目都更改为静态,但仍然有一个错误,即“DoMenu的非静态字段、方法或属性需要对象引用。我还尝试通过程序调用函数。DoMenu()如果这就是你作为实例调用的意思,你知道如何设置断点吗?我猜这一点是因为ShowMenu()不是静态的,它仍然是异常的。你可以尝试将ShowMenu设置为静态,或者在“DoMenu”开头设置断点“然后逐步执行,直到找到中断的行,并对其进行寻址。如果
DoMenu
不是静态的,则需要
Program
的一个实例来调用它-
Program.DoMenu()
将不起作用。感谢您的回答。我将所有项目都更改为静态,但仍然有一个错误,即“DoMenu的非静态字段、方法或属性需要对象引用。我还尝试通过Program.DoMenu()调用该函数,如果这就是您作为实例调用的意思,您知道如何设置断点吗?我猜这是因为ShowMenu()的缘故。”不是静态的,它仍然是异常的。您可以尝试将ShowMenu设置为静态的,或者您可以在“DoMenu”的开头插入一个断点,然后逐步执行,直到找到中断的行,并对其进行寻址。如果
DoMenu
不是静态的,则需要
Program
的实例来调用它-
Program.DoMenu()
不起作用。