2013-10-15 41 views
0

是否可以通過反射或其他方式更改.net中的字段/屬性的數據類型?在.net中更改字段的數據類型

我在尋找此功能,因爲在強類型數據集中存在問題。強類型數據集不會爲您提供更改可爲空類型的數據類型的靈活性。查看相關鏈接here。因此,如果在運行時有可能更改數據類型,則可以消除此問題。另外,要添加;根據這個MSDN Link;微軟團隊不太熱衷於提供這種支持。

+1

如果您不知道列的類型,那麼您可能不應使用強類型數據集。 –

+0

我不知道你是否可以使用'dynamic',但是有一個很好的理由,爲什麼人們只有在必要時才使用它。 – gunr2171

+0

@MikeChristensen我知道數據類型,但不幸的是,當我嘗試迭代數據表時,由於VS的數據集設計器具有拋出異常的唯一屬性,所以出現錯誤。 – shankbond

回答

1

首先,這不是一個錯誤;這是由於dbnull之間的差異,即未知值和null,即參考指向無處。更糟糕的是,微軟自己在解釋它時似乎很窮,這是因爲Connect和其他地方的一些不透明和無用的迴應。

這個問題有很多解決方案,具體取決於您試圖達到的目標。如果您使用的是數據綁定,那麼綁定機制通常會爲您透明地處理;如果您直接在代碼中直接訪問數據集,則設計人員將在構建Isxxxnull/setxxxnull方法之前爲您檢查該值,然後再使用它。最後,您可以將數據類型更改爲system.object,或者可以在設計器中改寫NullValue以根據需要輸入另一個值,只要該值對數據類型有效 - 例如對於int爲0或-1。

0

不是我所知道的。類型信息和綁定是在編譯時確定的,所以在運行時沒有辦法改變它。

用於更改打字的一種模式是adapter pattern。這可以通過所有其他字段,然後將相關字段「轉換」爲新類型。當然,這也發生在編譯時。

如果您對自己想要做的事情做更多的展開,可能會有更好的選擇。

0

Dataset s是相當過時的,源於.net v1.0。微軟永遠不會對它們進行更改或添加。一般來說,更好的方法是強類型POCO。您甚至可以創建多個強類型屬性,這些屬性都使用相同的後備存儲(類型對象)。在訪問相應的屬性之前,您需要測試正確的類型。

+0

感謝您的迴應,創建這些基於POCO的模型需要很長時間,然後用ADO.net填充它們。因爲這個原因,我去了Dataset,但現在我被卡住了:( – shankbond

+1

Linq to SQL和EF都會爲你創建POCO或者POCO) – andleer

+0

感謝您的編輯Mike。 – andleer