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

または、多分、すべてを1つのショットで実行するには:

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

最初のコードスニペットは、observablecollectionクラスのudcとして機能するはずです。

于 2010-06-15T07:43:13.440 に答える