Mono.Math.BigInteger недоступен из-за уровня защиты - PullRequest
3 голосов
/ 03 октября 2011

Итак, я работаю над программой на C # с использованием ideone и впервые работаю с Mono. Я пытаюсь использовать класс BigInteger (Mono.Math.BigInteger), но получаю ошибки. Вот мой код ниже. Что происходит и как мне это исправить? Благодарю.

using System;
using Mono.Math;

public class TFIB
{       
    public static int Main()
    {       
        const int FIB_SEQUENCE_SIZE = 300;
        BigInteger[] FibonacciSequence = new BigInteger[FIB_SEQUENCE_SIZE];

        // Calculate Fibonacci Sequence
        FibonacciSequence[0] = 0;
        FibonacciSequence[1] = 1;

        for (int i = 2; i < FIB_SEQUENCE_SIZE; i++)
        {
            FibonacciSequence[i] = FibonacciSequence[i - 1] + FibonacciSequence[i - 2];
        }

        while (true)
        {
            string[] tokenInput = Console.ReadLine().Split(' ');
            Mono.Math.BigInteger lowerBound = Mono.Math.BigInteger.Parse(tokenInput[0]);
            BigInteger upperBound = BigInteger.Parse(tokenInput[1]);
            if (lowerBound == 0 && upperBound == 0)
            {
                break;  // ending sequence found
            }
            else
            {
                // find the number of fibonacci sequences
                int numbersInRange = 0;

                for (int i = 0; i < FIB_SEQUENCE_SIZE; i++)
                {
                    if (FibonacciSequence[i] >= lowerBound)
                    {
                        if (FibonacciSequence[i] <= upperBound)
                        {
                            numbersInRange++;
                        }
                        else
                        {
                            continue;   // there is nothing more to find
                        }
                    }
                }

                Console.WriteLine(numbersInRange);
            }
        }

        return 0;
    }
}

Вот ошибки, которые я получаю:

prog.cs (9,13): ошибка CS0122: Mono.Math.BigInteger' is inaccessible due to its protection level /usr/lib/mono/2.0/mscorlib.dll (Location of the symbol related to previous error) prog.cs(9,23): error CS0122: Mono.Math.BigInteger [] 'недоступен из-за уровня защиты /usr/lib/mono/2.0/mscorlib.dll (Расположение символа, связанного с предыдущей ошибкой) prog.cs (23,27): ошибка CS0122: Mono.Math.BigInteger' is inaccessible due to its protection level /usr/lib/mono/2.0/mscorlib.dll (Location of the symbol related to previous error) prog.cs(24,17): error CS0122: Mono.Math.BigInteger 'недоступен из-за уровня защиты /usr/lib/mono/2.0/mscorlib.dll (Расположение символа, связанного с предыдущей ошибкой) Ошибка компиляции: 4 ошибки, 0 предупреждений

Ответы [ 3 ]

4 голосов
/ 03 октября 2011

Mono.Math.BigInteger находится в Mono.Security.dll, вы уверены, что ссылаетесь на правильную сборку? Ошибки компиляции, которые вы получаете, указывают на то, что это не так.

Хотя BigInteger используется (внутри) внутри mscorlib.dll, вы не можете ссылаться на него оттуда.

В качестве альтернативы есть реализация 4.0 System.Numerics.BigInteger, которую вы можете использовать, изменив using на System.Numerics и указав ссылку System.Numerics.dll, но она выглядит не так оптимизировано, как Mono.Math один, по крайней мере, пока.

К сожалению, похоже, что Ideone не позволяет настраивать ссылки на сборки, что означает, что вы не сможете вообще скомпилировать ни одно из решений. Вы можете отправить сообщение об ошибке только на Ideone.com .

0 голосов
/ 21 апреля 2015

Учитывая, что вы не можете ссылаться на сборку, просто добавьте BigInteger.cs в ваш проект напрямую.Источник можно найти здесь: https://github.com/mono/mono/blob/master/mcs/class/Mono.Security/Mono.Math/BigInteger.cs

0 голосов
/ 03 октября 2011

Попробуйте настроить таргетинг на платформу .NET 4.0 (используя dmcs).

Кроме того, с t его страница :

Да, но посмотрите на это:

http://blogs.msdn.com/bclteam/archive/2007/04/20/visual-studio-code- name-orcas-бета-1-был-выпущен-inbar-gazit.aspx

В частности:

некоторые хорошие и конструктивные отзывыот клиентов и партнеров, которые заинтересованы в расширенных числовых типах.Мы узнали, что есть некоторые потенциальные улучшения, которые мы можем сделать для этого типа, чтобы лучше удовлетворить их потребности.Таким образом, мы решили удалить BigInteger из бета-версии Orcas, чтобы мы могли решить эти проблемы и проблемы.- Джон Скит "

...