如何获得另一个函数的返回值?

时间:2012-04-04 16:23:18

标签: vb.net linq

如何在LINQ中给出另一个函数的返回值。

我有IEnumerable objects(Say ObjColl)。从该对象集合中,我必须根据另一个function(say GetObjPropertyValue)的返回值来过滤对象。我的最终输出应该是Dictionary of object及其propertyValue。这个字典不应该有属性值为零的对象。

GetObjPropertyValue函数将Object作为输入并将其属性作为字符串返回。但有时候,如果对象上不存在该属性,则不返回任何内容。

我的查询类似于

Dictionary(obj, string)=ObjColl.Where(Function(p) not GetObjPropertyValue(p) is nothing)

但是在上面的查询中,我应该编写代码来存储GetObjPropertyValue(p)的返回值,并将obj-p和returnValue组合添加到字典中。怎么写那个?

例如见下面的代码:

代码下面的最后一行是错误的。但请建议我如何纠正它。我的意图是,我想要每个fruitname的输出集合(比如字典)及其颜色(由其他函数调用返回),以获取GetFruitColor不是什么的所有水果(它可以是空的或有效的字符串)。

  

[code]私有函数GetFruitColor(fruit)作为字符串         '它会回归果实颜色。         '如果没有有效的水果和颜色,则返回“”(空字符串)         '如果水果不是水果,它什么都不返回。结束功能

private sub MyMethod()
  Create a list of strings.
        Dim fruits As New List(Of String)(New String() _
                                {"apple", "passionfruit", "banana", "mango", _
                                 "orange", "blueberry", "grape", "strawberry"})

Dim query = _fruits.Where(Function(fruit) k= GetFruitColor(fruit) if not k is nothing select fruit, k) 
End Sub

在上面的代码中,最后一行是错误的。那么如何将getFruitColor放在k中,如何更正它以保存k值并将输出作为水果字典和k值。

1 个答案:

答案 0 :(得分:1)

我建议:

  • 项目为由(水果,颜色)组成的匿名类型
  • 过滤掉“没有”颜色
  • 创建词典

在C#中,这将是:

var query = fruits.Select(fruit => new { fruit, color = GetFruitColor(fruit) })
                  .Where(pair => !string.IsNullOrEmpty(pair.color))
                  .ToDictionary(pair => pair.fruit, pair => pair.color);

相应地调整VB:)