Unity C#中Start()方法内var赋值局部变量空引用问题
Let's break down what's happening here — the var keyword itself isn't causing the NullReferenceException. That's just C#'s syntax sugar for letting the compiler infer the variable type. The real issue is that your ds.CekUser() call is returning null, and you're passing that null value directly to your Hitung(user) method, which is probably trying to access properties or methods on that null object.
First, let's fix the obvious syntax error in your code (you have an unclosed parenthesis on StartCoroutine(ToHome()... — that'll cause a compile error before you even hit runtime issues).
Then, let's tackle the null reference problem step by step:
1. Validate the CekUser() return value before using it
Add a null check right after you fetch the user. This prevents you from passing a null object to Hitung and lets you handle the "no user found" case explicitly:
void Start() { // First, make sure your DataService instance is actually valid if (ds == null) { Debug.LogError("DataService wasn't initialized properly!"); jmlUser = 0; StartCoroutine(ToLogin()); return; } var user = ds.CekUser(); // Check if user is null before proceeding if (user == null) { Debug.LogError("CekUser() returned null — no user found in database?"); jmlUser = 0; StartCoroutine(ToLogin()); return; } Hitung(user); if (jmlUser == 0) { StartCoroutine(ToLogin()); } else { StartCoroutine(ToHome()); // Fixed the unclosed parenthesis here } }
2. Add null safety to your Hitung method
Even if you add checks in Start(), it's good practice to guard against null inputs in methods that rely on a valid object. Update your Hitung method to handle null cases:
private void Hitung(YourUserModel user) { // Replace YourUserModel with the actual type returned by CekUser() if (user == null) { Debug.LogWarning("Hitung received a null user object — setting jmlUser to 0"); jmlUser = 0; return; } // Your existing logic to calculate jmlUser goes here }
3. Debug why CekUser() is returning null
You need to investigate the root cause of why CekUser() is sending back null. Possible reasons include:
- The database file
dbK3.sqlitedoesn't exist at the expected path in your Unity project - The database query in
CekUser()isn't finding any matching user records - There's an error in the
DataServiceclass that's causing the query to fail silently
Add error handling and logging inside your CekUser() method to get clarity:
// Inside your DataService class public YourUserModel CekUser() { try { // Your existing database query logic here var userRecord = // Your query to fetch the user if (userRecord == null) { Debug.LogWarning("No user records found in the database."); } return userRecord; } catch (System.Exception ex) { Debug.LogError($"Failed to fetch user: {ex.Message}\n{ex.StackTrace}"); return null; } }
Remember: var doesn't create or initialize objects — it just saves you from writing the full type name. The NullReferenceException is always about trying to access a member (like a property or method) on an object that hasn't been instantiated (is null).
内容的提问来源于stack exchange,提问作者Hendri Triwanto

