참조의 「없음」 — 빈 칸과 0
상태: 구현됨
없음의 표기는 빈 칸과 없음이 대체합니다. 이 문서가 「빈 칸」을 없음으로 읽는 자리는
-가 되었고, 참조 컬럼의 빈 칸은 컬럼이 무엇을 선언했든 거부합니다 — 아무도 채우지 않은 셀이기 때문입니다. 판정하는 자리와 그 이유는 아래 그대로입니다.
필수 참조 컬럼의 빈 칸이 거부되기는 하는데, 거부하는 자리가 값 파서였습니다. 그래서 메시지가
「Int32로 파싱할 수 없습니다」였고, 그것이 참조라는 것도 어떻게 고치는지도 나오지
않았습니다.
1. 문제 — 빈 칸과 0의 뭉개짐
참조 셀의 검사는 이렇게 되어 있었습니다.
// Zero is the conventional "points at nothing". Index values start at
// one, so it can never collide with a real row.
if (cell.Value is int key && key == 0)
continue;
0이면 통과합니다. 빈 칸은 파싱되면서 0이 되므로, 이 검사만 놓고 보면 빈 칸도 통과할 자리입니다.
| 시트에 적힌 것 | 저장되는 값 | 이 검사의 판정 |
|---|---|---|
12 (실재하는 행) | 12 | 통과 |
99 (없는 행) | 99 | 거부 — 맞습니다 |
0 (없음을 명시) | 0 | 통과 |
| 빈 칸 | 0 | 통과 ← 값만 보면 구별할 방법이 없습니다 |