Skip to content

Latest commit

 

History

History
63 lines (47 loc) · 1.31 KB

USP0016.md

File metadata and controls

63 lines (47 loc) · 1.31 KB

USP0016 Initialization detection with nullable reference types

C# 8.0 introduces nullable reference types and non-nullable reference types. Initialization detection needs to take Unity initialization methods into account.

Suppressed Diagnostic ID

CS8618 - Non-nullable field is uninitialized. Consider declaring the field as nullable.

Examples of code that produces a suppressed diagnostic

#nullable enable

using UnityEngine;

public class Test : Monobehaviour
{
	private GameObject field;
	
	private void Start()
	{
		Initialize();
	}
	
	private void Initialize()
	{
		field = new GameObject();
	}
}

and:

#nullable enable

using UnityEngine;

public class Test : Monobehaviour
{
	public GameObject Property { get; set; }
	
	private void Awake()
	{
		Property = GameObject.Find("Player");
	}
}

and:

#nullable enable

using UnityEngine;

public class Test : Monobehaviour
{
	[SerializeField] private UnityEngine.Object serializedField;
}

Why is the diagnostic reported?

The Code Style analyzer cannot detect that specific members are initialized by the Unity runtime.

Why do we suppress this diagnostic?

Fields or properties can be assigned to in Unity's initialization methods such as OnEnable(), Awake(), and Start() or all methods called by these, or the inspector.