Go had the same behavior until recently. Closures captures the variable from the for loop and it was a reference to the value.
They changed it because it’s “common” in Go to loop over something and run a goroutine that uses the variable defined in the loop. Workaround was to either shadow the variable with itself before the loop, or to pass the value as an argument.
It’s been a long time since I wrote c# so idk if the same is expected from the avg dev, but in Go it’s really not explicit that the variable will be a reference instead of a plain value
The source engine does not handle case sensitivity when loading assets from disk. On windows it’s not an issue but on Linux it will silently fail to load assets if the case doesn’t match. I lost so many hours trying to fix some weapon animation that had 0 seconds run time when porting a mod dedicated server to Linux.