private object SetValue(string key, object value, bool isAdd) { if (key == null) { throw new ArgumentNullException(nameof(key)); } int index = table.IndexOfName(key); if (index < 0) { index = table.AddField(key); } else if (isAdd && index < values.Length && !(values[index] is DeadValue)) { // then semantically, this value already exists throw new ArgumentException("An item with the same key has already been added", nameof(key)); } int oldLength = values.Length; if (oldLength <= index) { // we'll assume they're doing lots of things, and // grow it to the full width of the table Array.Resize(ref values, table.FieldCount); for (int i = oldLength; i < values.Length; i++) { values[i] = DeadValue.Default; } } return(values[index] = value); }
private object SetValue(string key, object value, bool isAdd) { if (key == null) throw new ArgumentNullException(nameof(key)); int index = table.IndexOfName(key); if (index < 0) { index = table.AddField(key); } else if (isAdd && index < values.Length && !(values index] is DeadValue)) { // then semantically, this value already exists throw new ArgumentException("An item with the same key has already been added", nameof(key)); } return SetValue(index, value); }