c#带??然后呢?操作人员

c#带??然后呢?操作人员,c#,C#,很抱歉问了一个简单的问题, 我是Azure函数HTTPtriggers与C#的新手, 有人知道什么是name=name??数据?名称以c#表示的平均值 它本质上意味着 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而不是尝试使用访问修饰符来避免出现NullReferenceExc

很抱歉问了一个简单的问题, 我是Azure函数HTTPtriggers与C#的新手, 有人知道什么是
name=name??数据?名称以c#表示的平均值

它本质上意味着

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,则第一个()返回第一个操作数,否则返回第二个操作数

请注意,这两个都不是特定于
动态
或Azure的

它也可以写成

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

如果
name
不是
null
获取该值,如果是,则尝试获取
data?.name
。表达式
data?.name
查看
data
是否为
null
,如果是,则返回
null
,否则返回
data.name
的值。您有两个问题,这两个问题都通过极其简单的谷歌搜索得到回答:“c#双问号”和“c#带点问号”。或者只是C#documentation谢谢你的评论@Alexeylarionov只是想确定这两个词放在一起是什么意思。感谢您的所有解释和相关问题链接,@camiloterevinto如果所有检查都为假,@camiloterevinto您的第二个算法将不会设置空值;)若名称不为空,则名称设置为自身。如果name为null,data为null,则无需再次将name设置为null。您是正确的,它不会影响任何内容,只是为了完整性。谢谢您的解释,它更清晰。第一个(?)返回第一个操作数,如果值为null,则返回第一个操作数。这是错误的,如果值不为null,则返回第一个操作数。
if ((name == null) && (data != null))
{
   name = data.name;
}