2016-02-13 133 views
0

我有一个类别Item,它是由其他类继承... Attraction,Business,CommunityEvent。我不能以我的方式设置对象items,这是一个语法错误。列表不能像这样分配。做这件事的最好方法是什么?基本上,吸引力是一个项目,但它有更多的属性。商业是一个项目,但它有更多的属性。 ...等等。C#继承/接口

public List<Item> GetItems(PageType type) 
    { 
     List<Item> items; 

     switch (type) 
     { 
      case PageType.Attraction: 
       items = new List<Attraction>(); 
       break; 
      case PageType.Business: 
      case PageType.ShopAndEat: 
       items = new List<Business>(); 
       break; 
      case PageType.Event: 
       items = new List<CommunityEvent>(); 
       break; 
      default: 
       items = new List<Item>(); 
       break; 
     } 

     // TODO: Call Webservice method to get Item 



     return items; 
    } 
+0

您可以使项目成为IEnumerable 并返回IEnumerable 。 – FreddyFlares

回答

0

你不需要做

items = new List<Business>(); 

你可以做

items = new List<Item>(); 

,仍然添加不同种类的项目到项目列表像

items.Add(new Business()); 

您的物品清单可以是所有不同的类型o f项目。

2

我想你可能会使用泛型和类型限制来为你做一些繁重的工作。如何

using System; 
using System.Collections.Generic; 

namespace Sample 
{ 
    public class Item 
    { 
    } 

    public class Business : Item 
    { 
    } 

    public class Attraction : Item 
    { 
    } 

    public class Foo 
    { 
     public List<T> GetItems<T>() where T : Item 
     { 
      //TODO: based on T, call the appropriate services to populate the list 
      return new List<T>(); 
     } 
    } 

    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      // Examples: 
      var foo = new Foo(); 
      List<Attraction> attractions = foo.GetItems<Attraction>(); 
      List<Business> businesses = foo.GetItems<Business>(); 
      List<Item> items = foo.GetItems<Item>(); 
      //... 
     } 
    } 
} 

其实填充与具有几个特性比Item(和访问这些属性)的对象名单将带你很快进入合作和反变仿制药。我强烈建议Eric Lippert在该主题上优秀的blog series

+0

[@Adam](http://stackoverflow.com/users/147934/adam)这是否解决了您的问题? – AGB