.NET - набор данных является производным от IEnumerable? - PullRequest
2 голосов
/ 04 февраля 2011

Я читал о LINQ и классе Dataset, и моя книга утверждает, что класс Dataset в .NET реализует или является производным от IEnumerable (моя книга не знает, какой именно).

  1. Что означает производная в контексте программирования?

  2. Я посмотрел на класс Набор данных в MSDN, и он не дал никаких указаний на то, что онбыл производным или реализован IEnumerable.Как связаны класс Dataset и IEnumerable?

  3. Как узнать в будущем?Я что-то пропустил на MSDN?Я бы подумал, что это будет где-то задокументировано ...

Спасибо

Ответы [ 2 ]

3 голосов
/ 04 февраля 2011

Не реализует IEnumerable, но реализует IListSource. IListSource имеет метод GetList(), который возвращает IList, который реализует IEnumerable.

Что означает, что он реализует IEnumerable (или вы можете получить IEnumerable, как здесь), что вы можете использовать следующую конструкцию:

foreach (var item in dataSet.GetList())
{
    // Do something with item
}

Это простой способ пройтись по всем предметам набора («перечислить» предметы).

Как узнать, можете ли вы это сделать? В большинстве случаев это очевидно. Все, что содержит набор элементов, вероятно, должно реализовывать IEnumerable. Со временем вы почувствуете это.

3 голосов
/ 04 февраля 2011

«Производная» может означать «наследует» или «подклассы», но в любом случае терминология будет неправильной; IEnumerable[<T>] - это интерфейс, поэтому тип может реализовать этот интерфейс.

Точно так же книга не права - она ​​не:

public class DataSet : MarshalByValueComponent, IListSource, IXmlSerializable,
     ISupportInitializeNotification, ISupportInitialize, ISerializable

.Tables перечислим, однако; DataTableCollection получает это от это базовый класс :

public class InternalDataCollectionBase : ICollection, IEnumerable

MSDN действительно ваш друг или просто "показывает определение" в visual studio.

...