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