Quick Reference
| Topic | File |
|---|---|
| Null reference, nullable types | nulls.md |
| Async/await, deadlocks | async.md |
| Deferred execution, closures | linq.md |
| Value vs reference, boxing | types.md |
| Iteration, equality | collections.md |
| IDisposable, using, finalizers | dispose.md |
Critical Rules
?.and??prevent NRE but!overrides warnings — still crashes if null.Resultor.Wait()on UI thread — deadlock, useawaitorConfigureAwait(false)- LINQ is lazy —
query.Where(...)doesn't execute until iteration - Multiple enumeration of IEnumerable — may re-query database, call
.ToList()first - Closure captures variable, not value — loop variable in lambda captures last value
- Struct in async method — copied, modifications lost after await
- String comparison culture —
StringComparison.Ordinalfor code,CurrentCulturefor UI GetHashCode()must be stable — mutable fields break dictionary lookup- Modifying collection while iterating — throws, use
.ToList()to iterate copy decimalfor money —float/doublehave precision lossreadonly structprevents defensive copies — use for performancesealedprevents inheritance — enables devirtualization optimization