首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >空字典上的TryGetValue

空字典上的TryGetValue
EN

Stack Overflow用户
提问于 2022-01-06 19:39:25
回答 2查看 650关注 0票数 1

我正试图像往常一样在字典上使用TryGetValue,如下所示:

代码语言:javascript
复制
Response.Context.Skills[MAIN_SKILL].UserDefined.TryGetValue("action", out var actionObj)

我的问题是字典本身可能是空。我可以简单地用“?”在UserDefined之前,但随后我会收到错误:

代码语言:javascript
复制
"cannot implicitly convert type 'bool?' to 'bool'"

我能处理这种情况的最好方法是什么?在使用UserDefined之前,是否必须检查TryGetValue是否为null?因为如果我不得不两次使用Response.Context.Skills[MAIN_SKILL].UserDefined,我的代码可能看起来有点混乱:

代码语言:javascript
复制
if (watsonResponse.Context.Skills[MAIN_SKILL].UserDefined != null && 
    watsonResponse.Context.Skills[MAIN_SKILL].UserDefined.TryGetValue("action", out var actionObj))
{
    var actionName = (string)actionObj;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-06 19:52:12

??表达式之后添加空检查( bool?操作符):

代码语言:javascript
复制
var dictionary = watsonResponse.Context.Skills[MAIN_SKILL].UserDefined;
if (dictionary?.TryGetValue("action", out var actionObj)??false)
{
    var actionName = (string)actionObj;
}
票数 6
EN

Stack Overflow用户

发布于 2022-01-06 22:06:56

另一种选择是与true进行比较。

它看起来有点奇怪,但它适用于三值逻辑,并说:这是值true,而不是falsenull

代码语言:javascript
复制
if (watsonResponse.Context.Skills[MAIN_SKILL]
    .UserDefined?.TryGetValue("action", out var actionObj) == true)
{
    var actionName = (string)actionObj;
}

您可以使用!= true执行相反的逻辑:这个值不是true,所以是false还是null

代码语言:javascript
复制
if (watsonResponse.Context.Skills[MAIN_SKILL]
    .UserDefined?.TryGetValue("action", out var actionObj) != true)
{
    var actionName = (string)actionObj;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70612752

复制
相关文章

相似问题

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