Hankatoo1618 Ответов: 1

Справка с кодом C# появляется постоянная ошибка nthnumber


Я пытаюсь сделать многопоточную программу серии Fibonnaci. Я продолжаю получать ошибки в части nthNumber кода. Я не знаю, как это исправить, я пробовал несколько разных вещей, и ничто на самом деле не избавило меня от ошибки.
{

    public class Worker
    {
        private readonly int nthNumber;

        public Worker(int nthNumber) => this.nthNumber = nthNumber;

        public void Calculate(object o)
        {
            Console.WriteLine("Fibonacci {0} is {1}", nthNumber, Fibonacci(nthNumber));
        }

        internal static int Fibonacci(int n)
        {
            if (n == 0)
            {
                return 0;
            }
            else if (n == 1)
            {
                return 1;
            }
            else
            {
                return Fibonacci(n - 1) + Fibonacci(n - 2);
            }
        }



        internal static readonly EventWaitHandle AllWorkersCompleted = new EventWaitHandle(false, EventResetMode.AutoReset);
        private static int numberOfWorkers = 0;
        private readonly int nthNumber;

        public Worker()
        {
            Interlocked.Increment(ref numberOfWorkers);
            this.nthNumber = nthNumber;
        }

        public void Calculate(object o)
        {
            Console.WriteLine("Fibonacci {0} is {1}", nthNumber, Fibonacci(nthNumber));
            if (Interlocked.Decrement(ref numberOfWorkers) == 0)
            {
                AllWorkersCompleted.Set();
            }


Что я уже пробовал:

Я пробовал предложения, данные самой Visual Studio, и ни одно из них не сработало.

F-ES Sitecore

В чем заключается ошибка и на какой линии она возникает?

Hankatoo1618

Любая строка с nthNumber на ней показывает ошибку, которая говорит, что тип Worker уже содержит определение для nthNumber.

Member 12901943

Дело не просто в том, что у вас есть nthNumber, определенный дважды "private readonly int nthNumber;" - первая строка рабочего класса, а затем снова после AllWorkersCompleted defintion?

Hankatoo1618

да

1 Ответов

Рейтинг:
2

OriginalGriff

Цитата:
тип Worker уже содержит определение для nthNumber

И действительно, это так: один в верхней части файла:
public class Worker
{
    private readonly int nthNumber;

    public Worker(int nthNumber) => this.nthNumber = nthNumber;
И еще один ближе ко дну:
private static int numberOfWorkers = 0;
private readonly int nthNumber;

public Worker()
{
    Interlocked.Increment(ref numberOfWorkers);
    this.nthNumber = nthNumber;
}
И ваш конструктор без параметров бесполезен, так как он присваивает значение nthNumber к себе. Поскольку метод не определяет локальную переменную или параметр называется nthNumber это означает, что this.nthNumber и nthNumber являются одной и той же переменной величиной.


CPallini

5.