none
Универсальная функция RRS feed

  • Вопрос

  • Здравствуйте, У меня есть функция
    Public Shared Function Deserialize() As ObservableCollection(Of IEntity)

    Как видно она возвращает Коллекцию Интерфейся IEntity. Но мне нужно не это. Я хочу проверить, можно ли написать функцию, которая будет возвращать только те классы, которые реализуют IEntity
    Была такая идея, к примеру еще одна похожая функция

        Public Shared Sub Serialize(obj As ObservableCollection(Of IEntity), t As Type)
    Но это тоже как бы не то что нужно. Т.е. здесь можно передать любой класс, а нужно только тот который реализует интерфейс IEntity

    5 августа 2015 г. 20:12

Ответы

  • Так как интерфейсы сами по себе не существуют, то возвращается коллекция имено классов. Т.е. в коллекции будут находится именно и можно привести каждый из них к фактическому типу.

    Сами коллекции (и другие дженерики) тоже можно привести к другим типам, но не всегда. Это зависит от того как именно они реализованы и задекларированны.

    Статья ниже описывает эту любопытную фичу:

    https://msdn.microsoft.com/en-us/library/ee207183.aspx



    This posting is provided "AS IS" with no warranties, and confers no rights.

    6 августа 2015 г. 15:47
    Модератор

Все ответы

  • Первая функция делает именно то что вам нужно - возвращает классы которые реализуют IEntity. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    6 августа 2015 г. 0:01
    Модератор
  • Нет, эта функция возвращает коллекцию интерфейса IEntity. Я уже пробывал присвоить коллекции класса реализующего IEntity результат функции Deserialize, но ничего не получилось. Ошибка приведения типов.
    6 августа 2015 г. 7:04
  • А коллекция каких типов изначально сериализовалась?

    Попробуйте десериализовать коллекция типа Object (или другой более конкретный тип, который был сериализован), а на ней вызвать метод OfType.

    • Помечено в качестве ответа Masharipov 7 августа 2015 г. 10:37
    • Снята пометка об ответе Masharipov 7 августа 2015 г. 10:37
    6 августа 2015 г. 9:35
  • Так как интерфейсы сами по себе не существуют, то возвращается коллекция имено классов. Т.е. в коллекции будут находится именно и можно привести каждый из них к фактическому типу.

    Сами коллекции (и другие дженерики) тоже можно привести к другим типам, но не всегда. Это зависит от того как именно они реализованы и задекларированны.

    Статья ниже описывает эту любопытную фичу:

    https://msdn.microsoft.com/en-us/library/ee207183.aspx



    This posting is provided "AS IS" with no warranties, and confers no rights.

    6 августа 2015 г. 15:47
    Модератор