1

下面的代码给了我用户定义的转换必须转换为封闭类型或从封闭类型转换,而片段#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};
}

提前致谢!

4

2 回答 2

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,则所有先前的代码都将起作用

于 2010-06-15T07:28:32.403 回答
0

Your first code snippet should work as a udc on the observablecollection class.

于 2010-06-15T07:43:13.440 回答