Аргументы метода приведения универсального класса

2

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

'T' всегда наследует 'FlatFileRecord'

Это не скомпилируется:

public class FlatFile<T>
{
   public void Save(T record)
   {
      FlatFileRecord castedRecord = (FlatFileRecord)record;
      castedRecord.RecordNumber...
   }
}

Этот компилятор, но, похоже, превзойдет все точки строго типизированного общего класса:

public class FlatFile<T>
{
   public void Save(object record)
   {
       FlatFileRecord castedRecord = (FlatFileRecord)record;
       castedRecord.RecordNumber...
   }
}
Теги:
generics
casting

1 ответ

3
Лучший ответ

Если T всегда будет выведено из FlatFileRecord, то ограничьте его таким образом:

public class FlatFile<T> where T : FlatFileRecord
{
   public void Save(T record)
   {
      FlatFileRecord flatRecord = record;
      flatRecord.RecordNumber...
   }
}

Если вам нужно обойтись без ограничения по какой-либо причине, вы можете применить к объекту, а затем снова вернуться:

public class FlatFile<T>
{
   public void Save(T record)
   {
      FlatFileRecord flatRecord = (FlatFileRecord)(object)record;
      flatRecord.RecordNumber...
   }
}
  • 0
    Я знал, что будет простой способ сделать это! Я, вероятно, должен использовать «где T: FlatFileRecord» для обеспечения его соблюдения. Я думаю, что мне нужно прочитать еще немного о дженериках ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню