我试图在Unity中的C#脚本中使用null-coalescing运算符,我的项目Scripting Runtime设置为.NET 4.x,因此它应该可以正常工作。
问题是,即使LEFT操作数的计算结果为null,也不会正确返回RIGHT操作数。
这是一个示例语句,当左侧Operand返回null时,该语句不起作用:
m_meshFilter = ( GetMeshFilter() ?? AddMeshFilter() );
Run Code Online (Sandbox Code Playgroud)
这是SAME确切的语句,除了它显式地将null传递给null-coalescing运算符(运行时可正常运行)
m_meshFilter = ( GetMeshFilter() == null ? null : GetMeshFilter() ) ?? AddMeshFilter();
Run Code Online (Sandbox Code Playgroud)
这是一个简短的脚本,可以直接在Unity中轻松测试问题。
using UnityEngine;
public class DoubleQuestionTest : MonoBehaviour
{
public GameObject myGo;
public MeshFilter m_meshFilter = null;
[ContextMenu( "Test1 Null Coalescing Operator" )]
void Test1()
{
m_meshFilter = ( GetMeshFilter() ?? AddMeshFilter() );
if ( m_meshFilter == null )
{
Debug.Log( "m_meshFilter was null, trying Alternate" );
m_meshFilter = ( …Run Code Online (Sandbox Code Playgroud)