通用类的转换方法参数

时间:2010-01-19 09:40:55

标签: c# .net generics casting

我创建了一个通用类,用于保存和查询平面文件中的对象。我不得不将方法参数更改为对象,以便我可以投射它们,我想知道我是否正确地采用这种方式......

'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...
   }
}

1 个答案:

答案 0 :(得分: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...
   }
}