我有两件来自Item&的系列ItemView控件:
项目
{ Id, Name, DisplayName, Code, Price }
ItemView控件
{ DisplayName, Price }
在.net中,可以使用没有 foreach语句的项初始化ItemViews:
foreach (var item in Items)
itemViews.Add(new ItemView
{
DispalyName = item.DisplayName,
Price = item.Price
});
它意味着类似于演员,所以只是存在属性(DisplanyName,Price)填写项目视图;
ItemViews = (ItemViews) Items;
可能?怎么样?我想我需要运营商重载。
修改
实际上问题是我的班级在时间内发生了变化,而且这种变化在代码中有冗余
我找到Omu.ValueInjecter包,它适用于一个对象但是如何将它用于集合?
foreach (var item in this._service.GetAll())
viewItemCats.Add((ItemCatInput)new ItemCatInput().InjectFrom(item));
答案 0 :(得分:0)
Item
和ItemView
具有公共属性,因此您可以在基类中定义公共属性并使用继承:
public class ItemView
{
public string DisplayName { get; set; }
public decimal Price { get; set; }
}
public class Item : ItemView
{
public int Id { get; set; }
public string Name { get; set; }
...etc...
}
使用这种方法,您可以将Item
视为ItemView
,以下是两个示例:
var itemViews = myListOfItems.Cast<ItemView>();
var myItemView = (ItemView) myItem;
答案 1 :(得分:0)
您描述的问题是由于您的设计。 它当然看起来像一个模型 - 视图设计问题。我会这样接近它:让ItemView&#34;包裹&#34;项目和公开用于查看项目的属性。
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public int Code { get; set; }
public decimal Price { get; set; }
}
public class ItemView
{
public ItemView(Item item)
{
this.item = item;
}
public string DisplayName
{
get
{
// TODO: make pretty name
return this.Item.Name + " (" + this.item.Code + ")";
}
}
public decimal Price
{
get { return this.item.Price; }
set { this.item.Price = value; } // TODO: add validation
}
private Item item;
}