【问题标题】:c# dynamic variable with ?? and ? operator [duplicate]c#动态变量与??和 ?运算符 [重复]
【发布时间】:2021-04-26 06:27:15
【问题描述】:

很抱歉问了一个简单的问题, 我是使用 C# 的 Azure Function HTTPtriggers 的新手, 有人知道 c# 中的name = name?? data?.name; 是什么意思吗?

        string name = req.Query["name"];
        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

【问题讨论】:

  • 如果name 不是null,则取该值,如果是,请尝试取data?.name。表达式data?.name 查找data 是否为null,如果是则返回null,否则返回data.name 的值。
  • 您有 2 个问题,都可以通过极其简单的 Google 搜索来回答:“c# double question mark”和“c# question mark with dot”。或者只是 C# 文档
  • 感谢@AlexeyLarionov 的评论
  • 只是想确定他们两个放在一起的意思。感谢您的所有解释,并关联问题链接,@CamiloTerevinto

标签: c#


【解决方案1】:

它本质上意味着

if name is not null
  set name to name
else
  if data is null
    set name to null
  else
    set name to data.name

第二个运算符 (?.) 通过返回 null 而不是尝试使用访问修饰符来避免 NullReferenceException。第一个 (??) 如果值不为 null,则返回第一个操作数,否则返回第二个。

请注意,这些都不是特定于 dynamic 或 Azure。

也可以写成

if ((name == null) && (data != null))
{
   name = data.name;
}

【讨论】:

  • 如果所有检查都为假,您的第二个算法将不会设置空值;)
  • 如果 name 不为 null,则 name 设置为自身。如果name为null,data为null,则无需再次设置name为null。
  • 你是对的,它不会影响任何东西,只是为了完整起见
  • 谢谢你的解释,清楚多了。它是如何工作的。
  • 第一个(??)如果值为null则返回第一个操作数错了,如果不为null则返回第一个操作数。
猜你喜欢
  • 2010-11-15
  • 1970-01-01
  • 2015-09-18
  • 2020-03-09
  • 1970-01-01
  • 2012-09-23
  • 2022-08-15
  • 2015-04-17
  • 1970-01-01
相关资源
最近更新 更多