Я работаю с библиотекой классов под названием DDay ICal. Это оболочка С# для системы iCalendar, реализованная в календарях Outlook, и множество многих других систем. Мой вопрос получен из некоторой работы, которую я делал с этой системой.
Здесь есть 3 объекта
- IRecurrencePattern - Интерфейс
- RecurrencePattern - реализация интерфейса IRecurrencePattern
- DbRecurPatt - пользовательский класс, который имеет оператор неявного типа
IRecurrencePattern: отображается не весь код
public interface IRecurrencePattern
{
string Data { get; set; }
}
RecurrencePattern: не отображается весь код
public class RecurrencePattern : IRecurrencePattern
{
public string Data { get; set; }
}
DbRecurPatt: не отображается весь код
public class DbRecurPatt
{
public string Name { get; set; }
public string Description { get; set; }
public static implicit operator RecurrencePattern(DbRecurPatt obj)
{
return new RecurrencePattern() { Data = $"{Name} - {Description}" };
}
}
Сбивая с толку часть: через систему DDay.ICal они используют IList
, чтобы содержать коллекцию шаблонов повторения для каждого события в календаре, пользовательский класс используется для извлечения информации из базы данных, а затем ее шаблон повторения через оператор неявного преобразования типов.
Но в коде я заметил, что он продолжал сбой при преобразовании в List<IRecurrencePattern>
из List<DbRecurPatt>
, я понял, что мне нужно преобразовать в RecurrencePattern
, а затем преобразовать в IRecurrencePattern
(так как есть другие классы, которые реализуйте IRecurrencePattern
по-разному, которые также включены в коллекцию
var unsorted = new List<DbRecurPatt>{ new DbRecurPatt(), new DbRecurPatt() };
var sorted = unsorted.Select(t => (IRecurrencePattern)t);
Приведенный выше код не работает, он выдает ошибку на IRecurrencePattern
.
var sorted = unsorted.Select(t => (IRecurrencePattern)(RecurrencePattern)t);
Это работает, поэтому у меня есть вопрос; Почему первый не работает? (И есть ли способ улучшить этот метод?)
Я считаю, что это может быть потому, что неявный оператор находится на объекте RecurrencePattern
, а не на интерфейсе, это правильно? (Я новичок в интерфейсах и неявных операторах)