首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用具有多个条件的字典TryGetValue

使用具有多个条件的字典TryGetValue
EN

Stack Overflow用户
提问于 2014-09-15 22:03:31
回答 1查看 1.6K关注 0票数 0

我对VB net相当陌生,在过去的一周里一直在玩字典。然而,当我试图用我的字典来做一些相当复杂的事情时,我遇到了一个问题。

首先,我应该指出,为了存储多个值,我正在用类对象填充字典:

代码语言:javascript
复制
Class NodeLoad
    Public Property NodeName As String
    Public Property NodeCase As String
    Public Property NodeAxis As String
    Public Property NodeDir As String
    Public Property NodeValue As Double
End Class

我的问题在于做字典查找,当我所寻找的值不存在时,我唯一的选择是尝试捕捉:

代码语言:javascript
复制
Try
   tempnodeitem = (From load In load_dict.Values Where load.NodeName = nodenum And load.NodeCase = pattern And load.NodeDir = dirarray(d)).First
   loadforce(d) = tempnodeitem.NodeValue
   Catch ex As Exception
   loadforce(d) = "0"
End Try

上面的代码运行,但花费的时间比我预期的要长得多,经过一些研究发现,/catch比TryGetValue花费的时间要长得多。我想做的事情(因为它是一个非常有效的函数)是使用TryGetValue。然而,据我所知,它只适用于一个键和一个值(TKey,TValue)。

有人能给我举一个例子,说明如何在多个条件下使用TryGetValue吗?

或者,如何在不占用资源的情况下捕获错误的dict查找?

我认为解决这个问题的一个好方法是使用嵌套的TryGetValue语句..。也可能是多个可以以不同方式处理此问题的数据集或列表。

我很感激你的意见!

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-15 23:02:49

由于您使用的是函数,所以我倾向于在本例中使用函数语法,而不是查询语法。你的条件有可能不止一次匹配吗?有四种类似的方法,即FirstSingleFirstOrDefaultSingleOrDefault,而且从来没有超过一个合适的情况。选择使用哪种方法可以归结为两个简单的问题:

  1. 至少会有一场比赛吗?如果没有,那么使用以"OrDefault“结尾的。
  2. 会有不止一场比赛吗?如果没有,那么使用以“单”开头的。

这两个问题的答案总是告诉你调用这四种方法中的哪一种。

现在,在这种情况下,您使用的是Dictionary,对吗?钥匙是什么?我原以为NodeName会是,但我想不是。无论如何,假设您的条件将有0或1匹配,您将使用SingleOrDefault。无论如何,FirstOrDefault的代码看起来完全一样:

代码语言:javascript
复制
Dim item = myDictionary.Values.SingleOrDefault(Function(nl) nl.NodeName = nodenum AndAlso
                                                            nl.NodeCase = pattern AndAlso
                                                            nl.NodeDir = dirarray(d))

loadforce(d) = If(item Is Nothing, 0.0, item.NodeValue)

请注意代码的另外两处更正:正确使用AndAlso而不是And,以及如果没有匹配,则将Double值分配给loadforce(d)而不是StringNodeValue属性是Double类型,所以如果有匹配,如何才能需要Double,如果没有匹配,又如何需要String

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25857629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档