2015-05-21 8 views
0

Я работаю с набором данных, который уже заполнен. Я итерация строк в таблице так:Как цитировать DataRowCollection таблицы данных без нулевой проверки

foreach (DataRow row in this.dataSet.Tables["tablename"].Rows) 
{ 
    // do something 
} 

это работает отлично, если нет ни одной строки, в этом случае нет никакой таблицы, так что я получаю «объект не установлен экземпляр ошибка стиля объекта. (т. е. this.dataSet.Tables ["tablename"] имеет значение null, поэтому я фактически вызываю null.Rows, что, конечно, borks).

Чтобы обойти эту проблему, что я делаю:

if (this.dataSet.Tables.Contains("tablename")) 
{ 
    foreach (DataRow row in this.dataSet.Tables["tablename"].Rows) 
    { 
     // do something 
    } 
} 

, который, откровенно говоря, некрасиво, как грех. Я предполагаю, что это потому, что .net возвращает null, а не нулевой объект.

Есть ли способ, которым я могу просто перебирать строки таблицы, если в таблице не существует циклов над пустой коллекцией?

ответ

1

Нет, вы не можете. Лучшее, что вы можете сделать, это скрыть проверку в методе расширения.

Если таблица существует, верните строки таблицы, в противном случае верните пустую последовательность.

public static class DataSetExtensions 
{ 
    public static IEnumerable<DataRow> RowsOfTable(this DataSet dataSet, string tableName) 
    { 
     if (dataSet.Tables.Contains(tableName)) 
      return dataSet.Tables[tableName].AsEnumerable(); 
     return Enumerable.Empty<DataRow>(); 
    } 
} 

Затем используйте его как

DataSet dataSet = new DataSet(); 
foreach (DataRow row in dataSet.RowsOfTable("tablename")) 
{ 
    // do something 
} 
+0

спасибо, я бы подумал о расширениях, и первый раз я видел расширение взять параметры; полезно! – mattumotu

 Смежные вопросы

  • Нет связанных вопросов^_^