Я кодирую простое приложение, которое работает с коллекциями. Как правильно реализовать метод интерфейса в приведенном ниже случае? В настоящее время он показывает ошибку «не все пути кода возвращают значение».
Это моя домашняя задача. Класс "Время" уже реализован и работает исправно. Я пытался найти в Интернете примеры успешной реализации этого метода, но безуспешно.
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"
Действительно, зачем создавать свой MyCollection
? Вы пытаетесь заменить некоторые List<T>
функции? Если вы хотите добавить несколько методов поверх List<Time>
или IEnumerable<Time>
, вы можете создать метод расширения.
Спасибо за ответ! На самом деле будут другие пользовательские методы, такие как заполнение коллекции случайными элементами и сортировка по определенным полям. И общая задача заключается в создании приложения, управляемого событиями, поэтому, я думаю, требуется «MyCollection», а не просто «List».
У вас все еще могут быть функции, которые делают все это, они не должны быть внутри класса, на самом деле я бы сказал, что они нет в классе, поскольку они не имеют значения.
@ArianLyn это не имеет ничего общего с ICollection<T>
тогда это фабрика, контроллер или какой-либо другой тип методов, которые использовать являются коллекцией. Фактически, в приложении, основанном на событиях, я бы исключил использование ReactiveX и Observables.
Если вы хотите написать свою собственную коллекцию, настоятельно рекомендуется наследовать от Collection<T>
docs.microsoft.com/en-us/dotnet/api/…stackoverflow.com/a/12070121/2194443
У вас отсутствует оператор return
в геттере.
class MyCollection : ICollection<Time>
{
List<Time> arr = new List<Time>();
int ICollection<Time>.Count
{
get
{
return arr.Count();
}
}
}
На самом деле Count()
допустимо, это метод Linq.
Вызов List.Count()
работает точно так же, потому что Count()
— это метод LINQ, который на самом деле проверяет, является ли ввод ICollection
, и в этом случае вызывает ICollection.Count
.
@DavidG Исправлено
Также вы можете использовать Определение тела выражения=>
class MyCollection : ICollection<Time>
{
List<Time> arr = new List<Time>();
int ICollection<Time>.Count => arr.Count;
}
Вы не возвращаете значение:
return arr.Count();
Однако более важный вопрос заключается в том, почему вы используетеMyCollection
в первую очередь, когда использование простогоList<>
, вероятно, сработает так же хорошо?