2011-02-12 118 views
2

你會如何解決這個問題?我想回到這個集合:匿名類型集合

Public Function GetShippingMethodsByCarrier(ByVal Carrier As ShippingCarrier) As List(of ?) 

    Return Carrier.ShippingMethods.Select(Function(x) New With {.ID = x.ID, .Name = String.Format("{0} {1}", Carrier.Name, x.Description)}) 


End Function 

謝謝!!

回答

2

你不能從這樣的函數返回匿名類型,因爲它沒有名字。

由於這是一個公共函數,應該有一個明確定義的返回類型。創建一個擁有這兩個屬性的新類。

如果返回類型是推斷的泛型參數,它可能返回它,但這不是你想要的。這對於LINQ來說非常有用,其中匿名類型本質上是從參數傳遞給結果類型的,但對於你正在做的事情沒有用處。

你也可以使用Tuple,但是你會失去屬性名稱。而且由於添加一個新的屬性會破壞調用者代碼,因此它不會被擴展。所以我也不會推薦。

+0

所以你將不得不做一個類來保存這兩個屬性,並返回這些列表? – Sam 2011-02-12 19:30:00

+0

@Sam我建議這樣做。有解決方法,但我不會在這裏推薦他們。 – CodesInChaos 2011-02-12 19:33:09

2

這裏的問題是你試圖以強類型的方式返回一個匿名類型。這在VB.Net(或者C#)中是不可能的。匿名類型意味着匿名,並且它們的名字不能在代碼中明確陳述。這兩種方法可以解決此是

選項#1使用/創建強命名的類型,如以下

Structure Item 
    Public ID as Integer 
    Public Name As String 
    Public Description As String 
End Structure 

選項#2設置返回類型爲Object,並在後期訪問列表綁定的方式

編輯

由於CodeInChaos有可能在一個強類型的方式以一般情況下歸還。但是,這似乎並沒有幫助你解決這個問題。