2010-01-19 97 views
2

我已經制作了一個通用類,用於保存和查詢平面文件中的對象。我一直需要改變方法參數的對象,所以我可以投他們,我想知道如果我要對這個正確的方式...泛型類的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... 
    } 
} 

回答

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

我知道會有一個簡單的方法來做到這一點!我應該使用'where T:FlatFileRecord'來執行它。我想我需要閱讀更多關於泛型的內容...... – Tim 2010-01-19 09:54:07