匿名类型集合

时间:2011-02-12 19:24:35

标签: vb.net anonymous-types

你会如何解决这个问题?我想要归还这个系列:

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 个答案:

答案 0 :(得分:2)

您无法从此类函数返回匿名类型,因为它没有名称。

由于这是一个公共函数,因此应该有一个定义良好的返回类型。创建一个包含这两个属性的新类。

如果返回类型是推断的泛型参数,则可以返回它,但这不是您想要的。这对于LINQ很有用,其中匿名类型本质上从参数传递到结果类型,但对你正在做的事情没有用。

你也可以使用元组,但是你会丢失属性名称。并且它不可扩展,因为添加新属性会破坏调用者代码。所以我也不建议这样做。

答案 1 :(得分:2)

这里的问题是你试图以强类型的方式返回一个匿名类型。这在VB.Net(或C#)中是不可能的。匿名类型是匿名的,它们的名称不能在代码中明确声明。解决这个问题的两种方法是

选项#1使用/创建强名称类型,如下所示

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

选项#2将返回类型设置为Object并以后期绑定方式访问列表

修改

作为CodeInChaos,可以在通用上下文中以强类型方式返回它们。但这似乎并没有帮助你解决这个特殊问题。