Як я кінуў гэта з дапамогай LINQ?

У мяне ёсць наступны фрагмент кода, на маё пытанне, як я магу кінуць гэта, выкарыстоўваючы спрошчаны сінтаксіс, магчыма, выкарыстоўваючы сінтаксіс LINQ?

 private ObservableCollection GetSelectableUnits(ObservableCollection units)
        {
            var selectableUnits = new ObservableCollection();

            units.ToList().ForEach(item=>selectableUnits.Add(new SelectableUnit(item)));

            return selectableUnits;
        }

Заўвага: SelectableUnit рэалізуе ISelectableItem.

дзякуй, -Mike

2

2 адказы

I suggest using this constructor of ObservableCollection, which lets you construct the collection from an existing IEnumerable.

У C# 4, вы можаце зрабіць:

return new ObservableCollection
           (units.Select(item => new SelectableUnit(item)));

Because of the covariance of the IEnumerable interface, an IEnumerable can be seen as an IEnumerable.

У C# 3, які не падтрымлівае дысперсію ў агульных інтэрфейсаў, вы можаце зрабіць:

return new ObservableCollection
           (units.Select(item => new SelectableUnit(item)).Cast());

(Або)

 return new ObservableCollection
               (units.Select(item => (ISelectableItem)new SelectableUnit(item)));

If you are doing this sort of thing often, consider writing a ToObservableCollection() extension- method on IEnumerable to let type-inference and/or method-chaining work in your favour.

6
дададзена

У C# 3/.Net 3.5

return new ObservableCollection
           (units.Select(item => new SelectableUnit(item)).Cast());
0
дададзена