C# 使用转换运算符键入强制转换集合

C# 使用转换运算符键入强制转换集合,c#,operators,explicit,operator-keyword,C#,Operators,Explicit,Operator Keyword,下面的代码告诉我用户定义的转换必须转换为封闭类型或从封闭类型转换为封闭类型,而代码段#2不。。。看来 我的选择是什么?显式运算符作为扩展方法?还有别的吗 public static explicit operator ObservableCollection<ViewModel>(ObservableCollection<Model> modelCollection) { var viewModelCollection = new ObservableCollec

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

提前谢谢

我建议您使用以下方法转换收藏:

var viewModelCollection = new ObservableCollection<ViewModel>(modelCollection.Cast<ViewModel>());
var viewModelCollection=newobservetecollection(modelCollection.Cast());
如果您喜欢EXTENSIONS,您可以定义如下内容(以避免前面代码中的新内容):

公共静态ObservableCollection ToObservableCollection(此IEnumerable coll)
{
返回新的ObservableCollection(coll);
}
或者,一次完成所有工作:

public static ObservableCollection<TNew> CastObservable<TNew,TOld>(this ObservableCollection<TOld> originalColl)
{
   return new ObservableCollection<TNew>(originalColl.Cast<TNew>());
}
公共静态ObservableCollection CastObservable(此ObservableCollection原始池)
{
返回新的ObservableCollection(originalColl.Cast());
}

显然,如果您已经定义了代码段#2

您的第一个代码段应该作为observablecollection类上的udc工作,那么前面的所有代码都可以工作。

您好。您在.NET2-3.5中遇到了集合的协方差/逆变问题。这已在.NET4中“修复”。阅读这篇博文,然后回答以下问题。希望这有帮助。可能重复@Worrier:谢谢你的回复。ViewModel/模型之间没有关系。不确定这是否是问题所在。我只是在寻找一种方式来转换“DigeMail”如下所示的方式。我猜ObservableCollection不是他自己的代码,但可能是这个-->
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>());
}