Как правильно реализовать элемент интерфейса?

Я кодирую простое приложение, которое работает с коллекциями. Как правильно реализовать метод интерфейса в приведенном ниже случае? В настоящее время он показывает ошибку «не все пути кода возвращают значение».

Это моя домашняя задача. Класс "Время" уже реализован и работает исправно. Я пытался найти в Интернете примеры успешной реализации этого метода, но безуспешно.

class MyCollection : ICollection<Time> 
    {
        List<Time> arr = new List<Time>();

        int ICollection<Time>.Count
        {

            get
            {
                arr.Count();
            }    
        }
     }

Я получаю сообщение об ошибке:

CS0161 "MyCollection.ICollection.Count.get': not all code paths return a value"

Вы не возвращаете значение: return arr.Count(); Однако более важный вопрос заключается в том, почему вы используете MyCollection в первую очередь, когда использование простого List<>, вероятно, сработает так же хорошо?

DavidG 29.05.2019 14:24

Действительно, зачем создавать свой MyCollection? Вы пытаетесь заменить некоторые List<T> функции? Если вы хотите добавить несколько методов поверх List<Time> или IEnumerable<Time>, вы можете создать метод расширения.

Panagiotis Kanavos 29.05.2019 14:30

Спасибо за ответ! На самом деле будут другие пользовательские методы, такие как заполнение коллекции случайными элементами и сортировка по определенным полям. И общая задача заключается в создании приложения, управляемого событиями, поэтому, я думаю, требуется «MyCollection», а не просто «List».

Arian Lyn 29.05.2019 14:32

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

DavidG 29.05.2019 14:33

@ArianLyn это не имеет ничего общего с ICollection<T> тогда это фабрика, контроллер или какой-либо другой тип методов, которые использовать являются коллекцией. Фактически, в приложении, основанном на событиях, я бы исключил использование ReactiveX и Observables.

Panagiotis Kanavos 29.05.2019 14:34

Если вы хотите написать свою собственную коллекцию, настоятельно рекомендуется наследовать от Collection<T>docs.microsoft.com/en-us/dotnet/api/…stackoverflow.com/a/12070121/2194443

Aleksei Petrov 29.05.2019 14:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У вас отсутствует оператор return в геттере.

class MyCollection : ICollection<Time> 
{
    List<Time> arr = new List<Time>();

    int ICollection<Time>.Count
    {

        get
        {
            return arr.Count();
        }    
    }
 }

На самом деле Count() допустимо, это метод Linq.

DavidG 29.05.2019 14:30

Вызов List.Count() работает точно так же, потому что Count() — это метод LINQ, который на самом деле проверяет, является ли ввод ICollection, и в этом случае вызывает ICollection.Count.

Panagiotis Kanavos 29.05.2019 14:33

@DavidG Исправлено

cl0ud 29.05.2019 14:33
Ответ принят как подходящий

Также вы можете использовать Определение тела выражения=>

class MyCollection : ICollection<Time>
{
    List<Time> arr = new List<Time>();

    int ICollection<Time>.Count => arr.Count;
}

Другие вопросы по теме