2010-10-07 39 views
1

我有我的數據庫中的幾個表,他們都包含不同的繼承類型的DataRow。輸入:如何傳遞類型?

此外,我有一個類應該是我的DataGrid (我的數據庫表連接到DataGrids)處理一些事情。

爲了做到這一點,此DataGrid處理程序中的一個方法必須將行轉換爲DataRow的確切繼承類型。

這樣的事情: (TempDataRow as DataRowTypeThatInheritsFromRegularDataRow).SpecialParameter = something;

爲了做到這一點,我必須通過繼承的DataRow類型的方法,所以它會知道如何做鑄造。

該方法一般如下所示:

公共無效的doSomething(DataRowType型) { (TempDataRow爲類型).SpecialParameter =東西; }

如何傳遞類型? 常規「類型」類型不能編譯。 如果我只傳遞'DataRow',它將不知道如何進行投射。

+0

無關的寵物peeve:'(SomeType爲SomeType).Dereference'是壞的。對於NullReferenceException,您正在交易InvalidCastException,這是一種信息丟失。使用'((SomeType)something).Dereference'。 – 2010-10-07 13:08:22

回答

-1

你可以使用:

TempDataRow as Type.GetType("DataRowTypeName") 
+0

這不會編譯。這種語言不能像那樣工作。 – 2010-10-07 12:47:00

1

如果您正在使用C#4.0,那麼你有沒有考慮使用「動態」類型的?

dynamic row = getDataRow(); 
doSomething(row); 

public void doSomething(DataRowTypeThatInheritsFromRegularDataRow row) 
{ 
    // <insert code here> 
} 

public void doSomething(SomeOtherDataRowType row) 
{ 
    // <insert code here> 
} 

這個例子應該在運行時,其功能基於什麼getDataRow()實際上返回調用,進行選擇。

對於dynaminc的進一步閱讀看到msdn

0

有很多的,你可以做到這一點的方式。首先,您可以找到所有類型共享的公共基類或接口,然後讓DoSomething()接受該基類或接口,或者如果您想完全動態化,則可以使用反射。很難告訴你如何做到這一點,因爲你沒有給任何具體的例子:

using System.Reflection; 
... 
public void DoSomething(object foo) { 
    var dataType = foo.GetType(); 

    type.GetProperty("SomeDynamicName").SetValue(foo, someOtherValue); 
} 

(不過,如果你正在使用C#4.0,如TK指出,你可以只使用動態類型,並)