2010-10-22 48 views
2

在C#中有可能轉換爲List<T> - 所以,如果您有:鑄造到列表(Of T)已在VB.NET

List<Activity> _Activities; 
List<T> _list; 

下面的工作:

_list = _Activities as List<T>; 

但翻譯與VB.NET一致:

_list = TryCast(_Activities, List(Of T)) 

拋出一個編譯錯誤。所以我有一個很好的尋找,並嘗試用LINQ找到一個方法,無濟於事。任何想法的人?

感謝

克里斯賓

+0

你有一個奇怪的定義「將工作」。如果實際上有一個名爲'T'的類,它可能會編譯,但它會在運行時拋出一個'InvalidCastException'。 – 2010-10-23 00:14:23

+0

我剛從Julie Lerman的實體框架書中摘錄了一段,所以我認爲她已經成功了。儘管我可以閱讀很多C#,但還是有一些對我來說還不熟悉的構造。 – CrispinH 2010-10-23 10:34:38

回答

4

我重播,這應該在技術上是可能的。顯然,編譯器不同意。解決方法很簡單,但:

Dim _Activities As New List(Of Activity) 
    Dim o As Object = _Activities 
    Dim tlist = TryCast(o, List(Of T)) 

或者作爲一個班輪:

Dim tlist = TryCast(CObj(_Activities), List(Of T)) 

JIT編譯器應該優化臨時離開,因此沒有任何費用。

+0

僅僅拋出一個'InvalidCastException'會不會更容易? – 2010-10-23 00:13:17

+0

這似乎已經成功了。我通過Julie Lerman的實體框架書,並且在運行代碼之前還有一些工作要做。 – CrispinH 2010-10-23 10:32:44

+0

漢斯!感謝您的修復。我能夠修復這種方法,並推動其他一些轉換怪異的東西,即VB轉換應用程序無法解決的問題,並讓VB解決方案完全適用於第26章。它可以在http://learnentityframework.com/LearnEntityFramework/downloads/#2ed上找到 – 2013-02-06 16:13:36

0

我總是用DirectCast(object, type)

1

您可以使用通用的List.ConvertAll方法。

給定一個列表,該方法將使用您提供的轉換器函數返回一個不同類型的列表。

我鏈接的MSDN文章有一個很好的例子。