c#中??的写法是什么意思

比如return a ?? (a = CreateObjectSet<cfg_program>("cfg_program"));
2025-01-07 00:52:12
推荐回答(3个)
回答1:

这个等同于
if(a==null)
{
a = CreateObjectSet("cfg_program");
return a;
}
else
{
return a;
}

双问号是.net的语法糖,是一个便捷的写法,意思是a是否为null,是的话a=后面的表达式,不为空就无变化。建议自己写个简单的测试看看,很easy的。
顺便说一下,后面那括号里面应该不需要a=了吧 应该是
return a ?? (CreateObjectSet("cfg_program"));

回答2:

如果a不是null,返回a,否则返回CreateObjectSet("cfg_program")

等同于
return a==null?a:CreateObjectSet("cfg_program")

回答3:

空合并运算符(??):用于定义可空类型和引用类型的默认值。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。
例:a??b,当a为null时则返回b,a不为空时返回a本身。空合并运算符为右结合运算符,即操作时从右向左进行组合的。如,“a??b??c”的形式按“a??(b??c)”计算。