@benjamin-hall said in Why does the C# compiler think I'm accessing unassigned variables?:
That seems to meet all the criteria and show the basic point of having to have checked b and c before getting to the B(a, b, c, d) call.
Alas, csc disagrees. :(
I ended up rewriting it a bit more - the four GetX methods (simplified version had one, but there's separate GetA/GetB/GetC/GetD methods) now have null checks built into them, instead of relying on the caller doing that check. Slightly more inefficient, but it's more reliable and readable code.