У меня есть два объекта, которые содержат некоторые свойства, которые являются точно такими же (одно и то же имя, тип). То, что я хочу сделать, это заполнить идентичные свойства одного объекта свойствами другого объекта. Я пытаюсь сделать это в коде, но он не работает. Свойства объекта Bin не заданы.Установить аналогичные свойства объекта в другом объекте
class Basket{
public Basket(int itemId, int itemGroup){
ItemId=itemId;
ItemGroup=itemGroup;
}
private int _itemId;
private int _itemGroup;
public int ItemId{ get{return _itemId;} set{_itemId = value};}
public int ItemGroup{ get{return _itemGroup;} set{_itemGroup = value};}
}
struct Bin{
public string Name;
private int _itemId;
private int _itemGroup;
public int ItemId{ get{return _itemId;} set{_itemId = value};}
public int ItemGroup{ get{return _itemGroup;} set{_itemGroup = value};}
public bool IsEmpty;
}
Basket basket = new Basket(1,1);
Bin bin = new Bin();
PropertyInfo[] basketPI = basket.GetType().GetProperties();
PropertyInfo[] binPI = bin.GetType().GetProperties();
foreach(PropertyInfo biPI in binPI){
foreach(PropertyInfo baPI in basketPI){
if(baPI.Name==biPI.Name){
biPI.SetValue(bin,baPI.GetValue(basket,null),null));
}
}
}
Я пытаюсь уйти от просто делать:
object1.ItemId = object2.ItemId;
object1.ItemGroup = object2.ItemGroup;
Я также интересно, если есть более элегантный способ сделать это?
EDIT: Я сократил классы; предназначенный для того, чтобы получить/установить там.
EDIT: Изменен для структуры из объекта. По какой-то причине ему не нравится устанавливать свойства структуры, когда я это делаю.
Поскольку вы отредактирован код, который я не вижу какой-либо очевидной причины, почему она не будет работать. Вы прошли через код с помощью отладчика? Возвращает ли он полный список свойств для обоих объектов? Являются ли имена совершенно одинаковыми в случае? Доходит ли он до строки кода SetValue? –
Doh, мой плохой. Я думал, что они оба являются объектами, но одна из них является структурой, а одна - объектом. Неудивительно, что GetValue/SetValue не работал! –