在没有foreach语句的情况下初始化视图对象的某些属性

时间:2014-03-12 07:46:25

标签: c# .net

我有两件来自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));

2 个答案:

答案 0 :(得分:0)

ItemItemView具有公共属性,因此您可以在基类中定义公共属性并使用继承:

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;
}