public static void MakeTypedReference_ReadOnlyField_Succeeds() { var os = new OneStruct() { b = 42, field = "data" }; var c = new ClassWithReadOnlyField(os); TypedReference tr = TypedReference.MakeTypedReference(c, new FieldInfo[] { c.GetType().GetField("Value") }); // doesn't throw Assert.Equal(os, TypedReference.ToObject(tr)); }
public static void MakeTypedReference_ToObjectTests() { OneStruct structObj = new OneStruct { field = "field", b = 2343 }; OtherType data = new OtherType { oneStruct = structObj }; Type dataType = data.GetType(); TypedReference reference = TypedReference.MakeTypedReference(data, new FieldInfo[] { dataType.GetField("oneStruct"), typeof(OneStruct).GetField("field") }); Assert.Equal("field", TypedReference.ToObject(reference)); reference = TypedReference.MakeTypedReference(data, new FieldInfo[] { dataType.GetField("oneStruct") }); Assert.Equal(structObj, TypedReference.ToObject(reference)); }
public AllConfig(byte[] array) { _discretOffset = 20; _relayOffset = (byte)(_discretOffset + DISCRET_MAX * 2 + 1); _diodeOffset = (byte)(_relayOffset + DIODE_MAX * 2 + 1); _systemDiodeOffset = (byte)(_diodeOffset + DIODE_MAX * 2 + 1); if (array.Length != 256) { throw new ArgumentException(); } var crc = Crc16.CalcCrcFast(array, 256 - 2); if (Common.TOWORD(array[254], array[255]) != crc) { MessageBox.Show("Ошибка CRC"); throw new ArgumentException(); } var ascii = new ASCIIEncoding(); if (_header != new string(ascii.GetChars(array, 0, _header.Length))) { throw new ArgumentException(); } var discretOffset = array[16]; var relayOffset = array[17]; var diodeOffset = array[18]; var systemDiodeOffset = array[19]; _discretCount = array[discretOffset]; _discretConfig = new OneStruct[DISCRET_MAX]; for (int i = 0; i < DISCRET_MAX; i++) { if (i < _discretCount) { _discretConfig[i] = new OneStruct(Common.TOWORD(array[discretOffset + i * 2 + 2], array[discretOffset + i * 2 + 1])); } else { _discretConfig[i] = new OneStruct(); } } _relayCount = array[relayOffset]; _relayConfig = new OneStruct[RELAY_MAX]; for (int i = 0; i < RELAY_MAX; i++) { if (i < _relayCount) { _relayConfig[i] = new OneStruct(Common.TOWORD(array[relayOffset + i * 2 + 2], array[relayOffset + i * 2 + 1])); } else { _relayConfig[i] = new OneStruct(); } } _diodeCount = array[diodeOffset]; _diodeConfig = new OneStruct[DIODE_MAX]; for (int i = 0; i < DIODE_MAX; i++) { if (i < _diodeCount) { _diodeConfig[i] = new OneStruct(Common.TOWORD(array[diodeOffset + i * 2 + 2], array[diodeOffset + i * 2 + 1])); } else { _diodeConfig[i] = new OneStruct(); } } _systemDiodeCount = array[systemDiodeOffset]; _systemDiodeConfig = new OneStruct[SYSTEM_DIODE_MAX]; for (int i = 0; i < _systemDiodeCount; i++) { if (i < _systemDiodeCount) { _systemDiodeConfig[i] = new OneStruct(Common.TOWORD(array[systemDiodeOffset + i * 2 + 2], array[systemDiodeOffset + i * 2 + 1])); } else { _systemDiodeConfig[i] = new OneStruct(); } } }
public ClassWithReadOnlyField(OneStruct value) => Value = value;
private async void button1_Click(object sender, EventArgs e) { var relays = new OneStruct[RELAY_MAX]; for (int i = 0; i < _relayDgv.Rows.Count; i++) { relays[i] = new OneStruct(); relays[i].Port = _relayDgv.Rows[i].Cells[1].Value.ToString(); relays[i].Pin = _relayDgv.Rows[i].Cells[2].Value.ToString(); relays[i].Pull = Convert.ToBoolean(_relayDgv.Rows[i].Cells[3].Value); relays[i].Inv = Convert.ToBoolean(_relayDgv.Rows[i].Cells[4].Value); } _config.Relays = relays; var discrets = new OneStruct[DISCRET_MAX]; for (int i = 0; i < _discretDgv.Rows.Count; i++) { discrets[i] = new OneStruct(); discrets[i].Port = _discretDgv.Rows[i].Cells[1].Value.ToString(); discrets[i].Pin = _discretDgv.Rows[i].Cells[2].Value.ToString(); discrets[i].Pull = Convert.ToBoolean(_discretDgv.Rows[i].Cells[3].Value); discrets[i].Inv = Convert.ToBoolean(_discretDgv.Rows[i].Cells[4].Value); } _config.Discrets = discrets; var diodes = new OneStruct[DIODE_MAX]; for (int i = 0; i < _diodeDgv.Rows.Count; i++) { diodes[i] = new OneStruct(); diodes[i].Port = _diodeDgv.Rows[i].Cells[1].Value.ToString(); diodes[i].Pin = _diodeDgv.Rows[i].Cells[2].Value.ToString(); diodes[i].Pull = Convert.ToBoolean(_diodeDgv.Rows[i].Cells[3].Value); diodes[i].Inv = Convert.ToBoolean(_diodeDgv.Rows[i].Cells[4].Value); } _config.Diodes = diodes; var systemDiodes = new OneStruct[SYSTEM_DIODE_MAX]; for (int i = 0; i < _systemDiodeDgv.Rows.Count; i++) { systemDiodes[i] = new OneStruct(); systemDiodes[i].Port = _systemDiodeDgv.Rows[i].Cells[1].Value.ToString(); systemDiodes[i].Pin = _systemDiodeDgv.Rows[i].Cells[2].Value.ToString(); systemDiodes[i].Pull = Convert.ToBoolean(_systemDiodeDgv.Rows[i].Cells[3].Value); systemDiodes[i].Inv = Convert.ToBoolean(_systemDiodeDgv.Rows[i].Cells[4].Value); systemDiodes[i].Tip = _systemDiodeDgv.Rows[i].Cells[5].Value.ToString(); } _config.SystemDiodes = systemDiodes; //_moduleWritterController = _moduleWritterController.Clone(); //_moduleWritterController.Fail += HandlerHelper.CreateActionHandler(Program.MainFormReferense, () => MessageBox.Show("Ошибка. Конфигурация не записана в устройство")); var aer = _config.ToBytes(); //File.ReadAllBytes(fileName); Common.SwapArrayItems(ref aer); _moduleWritterController.Data = aer; try { await _moduleWritterController.StartSaveForAnotherMemmoryType(_progress); MessageBox.Show("Файл успешно записан"); } catch (Exception exception) { MessageErrorBox me = new MessageErrorBox(exception.Message, "Ошибка.Конфигурация не записана в устройство"); me.ShowErrorMessageForm(); } }