Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Раширяющие методы


Автор: Uvs 18.10.2007, 09:22
Всем привет!
Хочу добавить в класс OdbcDataReader метод CopyTo(List<T>), чтоб скопировать содержимое в список любой структуры. 
Для этого создал статический класс со статическим методом:

public static class OdbcDataReaderExt<T>
{

public static void CopyTo(this OdbcDataReader dr, List<T> list)
{

   list.Add(dr.Get....());

}


}
,но компилятор ругается, что т.о. нельзя создать расширяющий метод. А без шаблона - никакого интереса нет! Как это можно сделать?

Автор: Linus 18.10.2007, 09:30
Как ругается? Может это из-за параметра  this OdbcDataReader dr?

Автор: 1stain 18.10.2007, 10:00
а если так:
Код

public static void CopyTo<T>(this OdbcDataReader dr, List<T> list)
{

   list.Add(dr.Get....());

}

з.ы. чисто навскидку, ибо Orcas еще не ставил...

Автор: HalkaR 18.10.2007, 10:05
Uvs, .Net то у тебя 3,5?

Автор: Uvs 18.10.2007, 10:19
да. От этого сильно зависит?

Добавлено @ 10:22
Ругается вот так:
 error CS1106: Extension methods must be defined in a non-generic static class

Если убрать шаблон из названия класса, то сразу тип T в параметре функции неизвестен.

Автор: 1stain 18.10.2007, 10:27
Цитата(Uvs @  18.10.2007,  10:19 Найти цитируемый пост)
Если убрать шаблон из названия класса, то сразу тип T в параметре функции неизвестен.

ну так и убери из класса, а метод сделай дженериком

Автор: Linus 18.10.2007, 10:41
Цитата(Uvs @ 18.10.2007,  10:19)
да. От этого сильно зависит?

Ааа, теперь понял  smile 

Автор: Uvs 18.10.2007, 10:46
Всем большое спасибо и конкретно "одинокому камню" smile так прошло:

  public static class OdbcDataReaderExt
  {
    public static bool CopyTo<T>(this OdbcDataReader dr, List<T> list)
    {
      try
      { ....
      }
      catch(Exception e) {
        MessageBox.Show(e.Message);
        return false;
      }
      finally {
        dr.Close();
        dr.Dispose();
      }
      return true;
    }
  }

Автор: 1stain 18.10.2007, 13:49
не за что  smile 

Цитата(Uvs @  18.10.2007,  10:46 Найти цитируемый пост)
 catch(Exception e)

а вот за такое, логарифмической линейкой по рукам бить надо! 
Не стоит перехватывать ВСЕ типы исключений. Юзаешь ODBC - вот и перехватывай ODBCException...

Автор: Uvs 19.10.2007, 04:32
хм... - возможно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)