Наборы преобразования типа с помощью Операторов преобразования

Ниже кода дает мне, Пользовательское преобразование должно преобразовать в или от включения типа, в то время как отрывок № 2 не делает... Кажется, что пользовательская подпрограмма преобразования должна преобразовать в или от класса, который содержит стандартную программу.

Каковы мои альтернативы? Явный оператор как дополнительный метод?Что-нибудь еще?

public static explicit operator ObservableCollection(ObservableCollection modelCollection)
{
    var viewModelCollection = new ObservableCollection();

    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};
}

Заранее спасибо!

1
задан Vyas Bharghava 15 June 2010 в 07:22
поделиться

2 ответа

Я бы посоветовал вам преобразовать коллекцию, используя:

var viewModelCollection = new ObservableCollection<ViewModel>(modelCollection.Cast<ViewModel>());

Если вам нравятся расширения, вы можете определить что-то вроде (чтобы избежать нового в предыдущем коде):

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

2
ответ дан 2 September 2019 в 23:46
поделиться

Ваш первый фрагмент кода должен работать как udc на классе observablecollection.

0
ответ дан 2 September 2019 в 23:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: