C# 无效令牌';布尔';类、结构或接口成员声明中的

C# 无效令牌';布尔';类、结构或接口成员声明中的,c#,C#,我正在尝试构建一个IsPrime(int)函数,无论数字是否为素数,它都会返回true或false using System; namespace lpn { class LargestPrimeNumber { private bool IsPrime(int n) { if(n < 4) { return true; }

我正在尝试构建一个IsPrime(int)函数,无论数字是否为素数,它都会返回true或false

using System;

namespace lpn
{
    class LargestPrimeNumber
    {
        private bool IsPrime(int n)
        {
            if(n < 4)
            {
                return true;
            }

            for(int i = 0; i * i < n; i++)
            {
                if(n % i == 0)
                {
                    return false;
                }
            }

            return true;
        }

        static void Main(string[] args)
        {
            int n = 1;

            while(true)
            {
                if(IsPrime(n))
                {
                    Console.WriteLine(n);
                }

                n++;
            }
        }
    }
}
使用系统;
名称空间lpn
{
类最大素数
{
私人楼宇iPrime(int n)
{
if(n<4)
{
返回true;
}
对于(int i=0;i*i
当我试图编译它时,我得到以下消息:

cs(7,17):错误CS1519:类、结构或接口成员声明中的令牌“bool”无效

尝试在iPrime中使用“static”关键字

private static bool IsPrime(int n)
        {
            if(n < 4)
            {
                return true;
            }

            for(int i = 0; i * i < n; i++)
            {
                if(n % i == 0)
                {
                    return false;
                }
            }

            return true;
        }
私有静态bool IsPrime(int n)
{
if(n<4)
{
返回true;
}
对于(int i=0;i*i
您提供的代码段返回的错误与您在问题中陈述的错误不同。因此,我将确保所有大括号正确对齐,因为您可能有太多大括号

从您在问题中提供的代码片段中,我将陈述您可能希望进行的以下观察和改进

您可以使iPrime方法
静态
,这意味着您不需要
LargestPrimeNumber
类的实例来访问该方法

您还可以创建
LargestPrimeNumber
类的新实例,并通过新实例访问IsPrime方法,例如:

LargestPrimeNumber lpn = new LargestPrimeNumber();
int numberOfIterations = 10;

while (n < numberOfIterations)
{
    if (lpn.IsPrime(n))
    {
       Console.WriteLine(n);
    }

    n++;
}

我已经包括了你的程序的修改版本

这将解决的错误包含消息“非静态字段、方法或属性'LargestPrimeNumber.IsPrime(int)'需要对象引用”。不确定作者为什么会得到不同的结果,因为我无法重现他们的错误。@BACON我自己尝试过,这段代码和错误就是您所说的,但我不知道他使用的是哪种类型的编译器。我得到错误消息的唯一方法是,如果我将方法签名更改为类似
private void bool IsPrime(int n)
private int bool IsPrime(int n)
,使
bool
多余。你确定你在这里发布的代码与你正在编译的代码相同吗?您能否尝试将代码从这里复制回您的代码文件,以确保原始代码中没有隐藏字符?我认为您的第一次迭代将尝试除以0。在2tanks@BACON处开始循环以获取提示。我关闭并重新打开了源文件,发现它没有正确保存。我复制了上面的代码,它成功了(除了除法为0之外);您的程序将其标识为素数。在解决第一个循环问题后,
i
必须从2开始,您还有第二个问题。是9素数吗?关于9的素性,你的程序怎么说?
for (int i = 0; i * i < n; i++)
{
   if (n % i == 0)
   {
      return false;
   }
}