Тип литейных коллекций с использованием операторов преобразования
-
27-09-2019 - |
Вопрос
Код ниже дает мне определенное пользовательское преобразование должно преобразовать или из приколного типа, а фрагмент № 2 не ... кажется, что Пользовательская процедура преобразования должна преобразовать в класс или из класса, который содержит рутину.
Какие мои альтернативы? Явный оператор как метод расширения? Что-нибудь еще?
public static explicit operator ObservableCollection<ViewModel>(ObservableCollection<Model> modelCollection)
{
var viewModelCollection = new ObservableCollection<ViewModel>();
foreach (var model in modelCollection)
{
viewModelCollection.Add(new ViewModel() { Model = model });
}
return viewModelCollection;
}
Фрагмент # 2.
public static explicit operator ViewModel(Model model)
{
return new ViewModel() {Model = model};
}
Заранее спасибо!
Решение
Я бы предложил вам преобразовать коллекцию, используя:
var viewModelCollection = new ObservableCollection<ViewModel>(modelCollection.Cast<ViewModel>());
Если вы любите Exciptions, вы можете определить что-то вроде (чтобы избежать нового в предыдущем коде):
public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> coll)
{
return new ObservableCollection<T>(coll);
}
Или, может быть, делать все в одном выстрел:
public static ObservableCollection<TNew> CastObservable<TNew,TOld>(this ObservableCollection<TOld> originalColl)
{
return new ObservableCollection<TNew>(originalColl.Cast<TNew>());
}
Очевидно, все предыдущие коды, будут работать, если вы определили фрагмент № 2
Другие советы
Ваш первый фрагмент кода должен работать в качестве UDC на классе наблюдательного элемента.