0
我在繞過我遇到的問題時遇到了麻煩。我想將一些通用規則應用於結構,並且由於它們的類型不同,我想使用通用函數來執行此操作。我的問題是,通過只能使用指定類型的參數的方法來操作結構,我無法在沒有廣泛的轉換的情況下找到一種方法。見,例如,需要什麼樣的步驟來指定一個DateTime
值應始終被指定爲UTC:將通用結構鑄造成其他結構
Public Shared Function Sanitize(Of T As Structure)(retValue As T?) As T?
' If value is DateTime it must be specified as UTC:
If GetType(T) = GetType(DateTime) AndAlso retVal.HasValue Then
' To specify the value as UTC, it must first be casted into DateTime, as it is not know to the compiler that the type in fact IS
' DateTime, even if we just checked.
Dim retValAsObj = CType(retVal, Object)
Dim retValAsObjAsDateTime = CType(retValAsObj, DateTime)
Dim retValWithSpecifiedKind = DateTime.SpecifyKind(retValAsObjAsDateTime, DateTimeKind.Utc)
retVal = CType(CType(retValWithSpecifiedKind, Object), T?)
End If
Return retVal
End Function
我缺少的東西?爲這樣一個簡單的任務投四次似乎很複雜,因爲我是最好的/最簡單的解決方案。
每當你看到自己寫這樣的代碼,那麼應該打開的燈泡是*這不是通用的*。隨着這種代碼剛剛變得複雜而痛苦的不可避免的結果。考慮利用vb.net對動態類型的體面支持,只要使用Option Strict Off,就可以使用'As Object'。 –