У меня есть структура, представляющая собой набор значений, которые я собираю с промышленного контроллера. Мне нужно пройти через все поля структуры, обновив ее значения, но SetValue выдает исключение
Объект не соответствует типу цели
public struct MyStruct
{
public bool PLC_Manual_0_0 {get; set;}
public bool PLC_Auto_0_1 {get; set; }
public char PLC_KNR_9_14_0 {get; set;}
public char PLC_KNR_10_15_0 {get; set;}
public byte Reserva_16_0 {get; set;}
public byte Reserva_17_0 {get; set;}
public int Reserva_32_0 {get; set;}
public int Reserva_34_0 {get; set;}
public double Reserva_36_0 {get; set;}
...
}
public void ReadData()
{
MyStruct mystruct = new MyStruct();
Type mystruct_type = mystruct.GetType();
PropertyInfo[] mystruct_properties = mystruct_type.GetProperties();
foreach (PropertyInfo mystruct_property in mystruct_properties)
{
switch (mystruct_property.PropertyType.Name)
{
case "Boolean":
bool bool_data = true;
mystruct_property.SetValue(mystruct_property, bool_data);
break;
case "Byte":
byte byte_data = 1;
mystruct_property.SetValue(mystruct_property, byte_data);
break;
case "Char":
char char_data = '1';
mystruct_property.SetValue(mystruct_property, char_data);
break;
default:
break;
}
}
Я также попробовал SetValue, используя mystruct_type вместо mystruct_property с тем же результатом.
Что я делаю не так?
SetValue
должен быть экземпляр, свойство которого вы хотите установить, но вместо этого вы передали информацию о свойстве. Но в любом случае это безнадежно, потому чтоMyStruct
— это тип значения;SetValue
повлияет только на копию значения, которое вы ему передадите, а не на исходное значение. Эта структура, вероятно, должна быть классом. - person Jeff   schedule 27.08.2020