Кастинг в коллекцию <interface> - PullRequest
0 голосов
/ 27 сентября 2011

При этом:

public class Widget : IWidget {}

Почему collection2 == null здесь:

var collection1 = collectionView.SourceCollection as ObservableCollection<Widget>;
var collection2 = collectionView.SourceCollection as ObservableCollection<IWidget>;

Где SourceCollection is ObservableCollection<Widget>

1 Ответ

1 голос
/ 27 сентября 2011

, если коллекция объявлена ​​как ObservableCollection<Widget>, она не может быть преобразована в ObservableCollection<IWidget>. Я полагаю, что это возможно в .NET 4, но не в 3.5 и менее - ИСПРАВЛЕНИЕ - см. Комментарий Адама ниже.

Чтобы вышеприведенное сработало, вы должны объявить список как ObservableCollection<IWidget>, тогда оба приведения будут работать. Вы всегда должны использовать тип интерфейса, где это возможно.

В качестве отступления при использовании ключевого слова as это называется безопасным приведением. Он вернет ноль, если приведение невозможно. Явное приведение ... т.е. (ObservableCollection<IWidget>) collectionView.SourceCollection сгенерирует исключение, если приведение невозможно.

...