Почему после заполнения моей пользовательской коллекции есть цикл в ICollection.Count - PullRequest
0 голосов
/ 11 сентября 2018

Я никогда не делал коллекцию раньше.Я попытался найти решения в Интернете, а также с тем, что они должны были добавить для работы интерфейсов.

Я добавил все, что мог найти в Интернете.

public class RecipeObjectCollection : ICollection<RecipeObject>, IList<RecipeObject>, IEnumerable<RecipeObject>, IEnumerable, IList, ICollection
{
    public struct Enumerator : IEnumerator<RecipeObject>, IDisposable, IEnumerator
    {
        private RecipeObjectCollection collection;

        private RecipeObject current;

        private int next;

        private readonly int version;

        public RecipeObject Current => this.current;

...

Я, очевидно, могне помещать все в пример кода, но в остальной части кода есть только унаследованные функции или методы.

Все работало без забот, за исключением того, что я заметил, что, когда я заканчивал заполнять свою коллекцию, был цикл в ICollection.Count и IList.this [int index]

object IList.this[int index]
{
    get
    {
         return this[index];
    }
    set
    {
         this.CheckIndex(index);
         try
         {
              this[index] = (RecipeObject)((object)value);
              return;
         }
         catch (InvalidCastException) { }
         catch (NullReferenceException) { }
         throw new ArgumentException();
     }
}

int ICollection.Count
{
     get
     {
          return this.Count;
     }
}

В режиме отладки я не выяснил, почему этот цикл запускается и как или если оностанавливается одновременно.Моя программа работает очень хорошо, несмотря на этот цикл.Я не знаю, нормально ли это, даже если я в этом сомневаюсь.

Я могу добавить код или что-нибудь еще, если ему не хватает того, на что можно дать ответ или хотя бы подсказку.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Хотя я чувствую, что для конкретного ответа недостаточно информации, я бы предположил, что вы можете ссылаться на бесконечную рекурсию как цикл в этом вопросе.

Если это так, я не удивлюсь, если следующая строка в объекте объекта IList.this [int index] метод:

this[index] = (RecipeObject)((object)value);

будет вызывать метод объекта IList.this [int index] снова рекурсивно бесконечно, пока не будет достигнута максимальная глубина рекурсии.

Может быть, вы намеревались сделать что-то вроде

this.collection[index] = (RecipeObject)((object)value);"

в этой строке вместо?

0 голосов
/ 11 сентября 2018

вам не нужно реализовывать все методы.если вы хотите использовать коллекцию, вы можете объявить ее следующим образом.

public class  RecipeObjectCollection: List<RecipeObject>
{
    //......
}

public class RecipeObject
{
    //......
}

, тогда вы можете воспользоваться существующими методами объекта List.без лишних хлопот реализации лишних методов.Странное поведение, которое вы объясняете, может быть результатом реализации одного из методов.

...