使用转换运算符键入转换集合

时间:2010-06-15 07:22:10

标签: c# operators explicit operator-keyword

下面的代码告诉我用户定义的转换必须转换为封闭类型或来自封闭类型,而代码片段#2则不...显示a user-defined conversion routine must convert to or from the class that contains the routine.

我有什么选择?显式运算符作为扩展方法?还有什么吗?

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

Snippet#2

public static explicit operator ViewModel(Model model)
{
    return new ViewModel() {Model = model};
}

提前致谢!

2 个答案:

答案 0 :(得分:2)

我建议您使用以下方法转换集合:

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

如果您喜欢exstensions,您可以定义类似的内容(以避免上一代码中的新内容):

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

,所有以前的代码都会有效

答案 1 :(得分:0)

您的第一个代码段应该作为observablecollection类的udc。