본문으로 건너뛰기

컬럼에 번호 달기

시트가 코드가 되는 모습으로


이름 뒤에 @N 을 달면 바이너리 파일이 컬럼을 위치가 아니라 번호로 가리킵니다. 이미 배포된 클라이언트가 컬럼 순서 변경을 견디게 하는 장치입니다.

한 테이블 안에서 전부 달거나 전부 안 답니다. 지운 컬럼은 #이름@N 으로 남겨 그 번호를 예약합니다.

테이블 Wire

[System.Serializable]
public partial class WireRecord
{
#region Values
/// <summary>
/// primary index
/// </summary>
public int Index => _index;

/// <summary>
/// display name
/// </summary>
public string Name => _name;

/// <summary>
/// added after the drop
/// </summary>
public int Price => _price;
#endregion

#region Storage
internal int _index;
internal string _name = "";
internal int _price;
#endregion

#region ToString
public override string ToString()
{
var sb = new StringBuilder("{");
sb.Append("\"Index\":"); ToStringHelper.ToString(Index, sb);
sb.Append(",\"Name\":"); ToStringHelper.ToString(Name, sb);
sb.Append(",\"Price\":"); ToStringHelper.ToString(Price, sb);
sb.Append("}");
return sb.ToString();
}
#endregion
}

WireTable.cs

생성된 코드에 번호는 없습니다. @N 은 파일이 컬럼을 가리키는 방법이고, 코드가 보는 것은 멤버 이름뿐입니다 — OldColour 는 아예 없습니다.

한 번 데이터를 실은 번호는 다시 쓸 수 없습니다. 그래서 지울 때 #이름@N 을 남깁니다 — 자세한 것은 바이너리 형식에 있습니다.