2011-02-12 101 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有可能在一个强类型的方式以一般情况下归还。但是,这似乎并没有帮助你解决这个问题。