2012-12-11 87 views
0

我想創建一個類,該類將添加一些有助於使用DataTable類的新方法。我想避免靜態類,所以我創建了一個類將DataTable對象轉換爲繼承自DataTable的自定義類對象

MyDataTable : DataTable 

和我的方法存在。

如何將DataTable對象轉換爲MyDataTable對象? 我已經嘗試過

MyDataTable dt2 = (MyDataTable)dt; 

但它返回一個InvalidCastException的。

我現在知道它不能以這種方式工作。但我也不知道我該如何解決這個問題。誰能幫我這個?

+0

喜歡的時候說MyDataTable myTable的=新MyDataTable();你覺得有什麼方法需要添加? – Derek

+0

我注意到在我的代碼中我想用一種方法替換多個代碼。像獲得第一行那樣的東西,或者如果沒有行,則返回null。我試圖爲這些方法創建靜態類,但它並沒有減少代碼量,這是我的目標。如果我可以擴展DataTable類(以某種方式)讓這些方法對我有很大的幫助。 –

回答

2

當然這會導致InvalidCastException,因爲不是每個DataTable都是MyDataTable類型。你需要創建一個你的類型的實例:

MyDataTable myTable = new MyDataTable(); 

通常我提供了我繼承的類型中使用最多的構造函數。您可以從類型的構造函數中調用base constructor。例如:

public class MyDataTable : DataTable 
{ 
    public MyDataTable(string name) 
     : base(name) 
    { 
     // additional initialization 
    } 
} 
+0

有趣的是,作爲一個新手解決問題,提出了一個問題,改變了項目並從未開展過工作。現在我突然再次使用DataTables,並默認使用此解決方案。謝謝,蒂姆! :-) –

1

甚至可以爲從DataTable繼承的自定義類編寫隱式轉換。

+0

Unfortunatelty我收到一個錯誤:'MyDataTable.implicit操作符MyDataTable(System.Data.DataTable)':創建公共靜態隱式操作符時,不允許用戶定義到基類或從基類轉換MyDataTable(DataTable表) 。 –

+0

你需要編寫代碼鑄造..我會盡快更新你 –

相關問題