Имя не существует в текущем контексте в инвариантном методе - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь использовать инварианты (библиотеку контрактов кода) в моей программе внутри класса парковки, где реализованы все мои методы, но появляется «Имя не существует в текущем контексте». Выделенные слова, как представляется, создают проблему. conferenceID и parkingID принадлежат двум разным классам, которые находятся за пределами класса CarPark.Вот что я пробовал до сих пор.

 class Program
{


    public class Conferences
    {
        public int conferenceID { get; set; }
        public Parking[] parkingArray { get; set; }
        public DateTime DateTime { get; set; }

    }

    public class Parking
    {
        public int parkingID { get; set; }
        public bool parkingIsReserved { get; set; }
        public bool parkingIsPurchased { get; set; }
        public bool parkingisReservedBy { get; set; }
        public DateTime DateTime { get; set; }
    }

       [ContractInvariantMethod]
        void ObjectInvariant()
        {
            Contract.Invariant(**conferenceID** >= 0 && conferenceID <= totalConferences);
            Contract.Invariant(**parkingID** >= 0 && parking <= maxParkingSpaces);
            Contract.Invariant(parkingID <= availableParkings);
        }

1 Ответ

1 голос
/ 23 апреля 2019

Ваши инварианты контракта должны быть в том же классе, что и поля, которые вы хотите протестировать, a.k.a Parking в вашем примере:

public class Parking
{
    public int parkingID { get; set; }
    public bool parkingIsReserved { get; set; }
    public bool parkingIsPurchased { get; set; }
    public bool parkingisReservedBy { get; set; }
    public DateTime DateTime { get; set; }

   [ContractInvariantMethod]
    void ObjectInvariant()
    {
        Contract.Invariant(**conferenceID** >= 0 && conferenceID <= totalConferences);
        Contract.Invariant(**parkingID** >= 0 && parking <= maxParkingSpaces);
        Contract.Invariant(parkingID <= availableParkings);
    }
}
...