private static MutableTuple MakeTuple(Type tupleType, int size, BitArray bitArray) { MutableTuple tuple = (MutableTuple)Activator.CreateInstance(tupleType); tuple._size = size; tuple._valuesSet = bitArray; if (size > 0x80) { while (size > 0x80) { size = ((size + 0x80) - 1) / 0x80; } for (int i = 0; i < size; i++) { PropertyInfo property = tupleType.GetProperty("Item" + string.Format(CultureInfo.InvariantCulture, "{0:D3}", new object[] { i })); tuple.SetValueImpl(i, MakeTuple(property.PropertyType, null)); } } return(tuple); }
private void SetNestedValue(int size, int index, object value) { if (size < 0x80) { this.SetValueImpl(index, value); } else { MutableTuple valueImpl = this; int num = -1; foreach (int num2 in GetAccessPath(size, index)) { if (num != -1) { valueImpl = (MutableTuple)valueImpl.GetValueImpl(num); } num = num2; } valueImpl.SetValueImpl(num, value); } }