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