我有一個通用的類,我用來保存從數據庫加載的信息。如果在寫入時所有類型都未知,則將值類型轉換爲泛型對象中的(可能)可枚舉枚舉類型?
我有這需要一個DataRow作爲參數,使用對象的已知列名,而DataRow中提取數據的方法,使得:
Dim loadData As T = CType(myDataRow("myColumnName"), T))
作品,因爲在大多數情況下,我的默認分配。
不幸的是,由於一些可怕的設計約束,我的一些列可能爲空,也可能從枚舉中獲取。
這意味着當<T>
是Nullable(Of SomeEnumeration)
上面的代碼不起作用,因爲我不能將0
直接投到SomeEnumeration.Zero
。
有沒有辦法檢查<T>
是不是Nullable(Of [Enum])
?或者用某種方法寫出一個允許Integers
轉換成Nullable(Of [Enum])
的方法?
我覺得我忘記了一些可以讓我寫出其中一個的東西,但是我的軟弱谷歌卻什麼都沒有變。
編輯:好,這要歸功於以下dasblinkenlight的回答,我可以當這種情況發生時檢測,但我現在需要做的是採取一種<T>
這是我所知道的是Nullable(Of SomeClass)
,得到一種參考SomeClass
然後創建一個類型爲Nullable(Of SomeClass)
的新對象並將其分配給LoadData。
我嘗試的一切都分崩離析。有任何想法嗎?
編輯2:
我爲獲得該枚舉值的價值的解決方案是:
Dim baseType As Type = Nullable.GetUnderlyingType(GetType(T))
loadData = [Enum].Parse(baseType, dataRowIn(Me._dataName))
我的問題是,我有很多困難,在尋找這將接受baseType
任何功能作爲一個實際的類型。
[Enum] .Parse接受baseType
作爲參數,我知道baseType
是一個[Enum]類型,因爲dasblinkenlight的代碼,所以在這種情況下,我可以編寫一個解決方案。這是一個對我的問題非常具體的解決方案(即,T
是Nullable(of SomeEnumeration)
),但它仍是一個解決方案。
http://stackoverflow.com/a/5199474/284240 – 2011-12-14 13:26:58
從其他SO貼子,這是值得一讀http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/ representation-and-identity.aspx – 2011-12-14 13:41:33