Hi! I get an error when i try to check “currentState”
But when i use “currentState?.” its working! But its still null…
Hi! I get an error when i try to check “currentState”
Yes. The ? pattern does the null check for you.
So, instead of writing
if (currentState != null) currentState.Exit();
we can just write
currentState?.Exit();
If the currentState is null, C# will not call .Exit() on it. If you leave out the ?, C# will call .Exit() and fail with a NullReferenceException if currentState is null.
Edit
I misunderstood your post. You have a problem in your logic here

You check currentState if it’s null. Presume it is not, so we enter the if. We call Exit(), all is still good. Now we replace the reference in currentState with newState. Presume newState is null. Now we have replaced currentState with null, and call currentState.Enter(). We get a NullReferenceException and don’t know why…
You should check currentState again after you changed its reference
if (currentState != null)
{
currentState.Exit();
}
else
{
Debug.LogError("Try use null State!");
}
currentState = newState;
if (currentState != null)
{
currentState.Enter();
}
else
{
Debug.LogError("Try use null State!");
}
@bixarrio’s code can be simplified, and still throw a debug when newState is null:
public void SwitchState(State newState)
{
currentState?.Exit(); //will only call if not null
currentState = newState;
currentState?.Enter();
if(currentState==null) Debug.Log($"{name} has entered a null state.");
}
the ? qualifier is a C# syntactic sugar that allows us to execute a function on an object only if the object is not null. This works on classes that are not descended from MonoBehavior or ScriptableObjects.
Yes. I was showing it without the ? because the OP said it works with ? but it doesn’t work without it