2011-04-11 44 views
0

我想创建一个符合预定义的IFlower接口的花的列表(例如),如下所示。List.AddRange有一些无效的参数

public interface IFlower 
{ 
    string colour { get; } 
    int petals { get; } 
} 

public class Rose : IFlower 
{ 
    public Rose() 
    { 
     string[] colours = new string[]{ "Pink", "Orange", "Red", "Crimson", "Cerise" }; 
     Random random = new Random(); 
     colour = colours[random.Next(0, 4)]; 
    } 

    public string colour { get; set; } 

    public int petals 
    { 
     get { return 8; } 
    } 
} 

public class Daisy : IFlower{ 
    public Daisy() 
    { 
     string[] colours = new string[]{ "White", "Yellow", "Purple" }; 
     Random random = new Random(); 
     colour = colours[random.Next(0, 2)]; 
    } 

    public string colour { get; set; } 

    public int petals 
    { 
     get { return 18; } 
    } 
} 

public class Flowers 
{ 
    public List<Daisy> Daisies 
    { 
     get 
     { 
      List<Daisy> items = new List<Daisy>(); 
      items.Add(new Daisy()); 
      items.Add(new Daisy()); 
      return items; 
     } 
    } 

    public List<Rose> Roses 
    { 
     get 
     { 
      List<Rose> items = new List<Rose>(); 
      items.Add(new Rose()); 
      items.Add(new Rose()); 
      return items; 
     } 
    } 
} 

问题是,当我运行下面的代码来创建拼接列表:

public List<IFlower> Flowers 
    { 
     get 
     { 
      List<IFlower> output = new List<IFlower>(); 
      output.AddRange(Daisies); 
      output.AddRange(Roses); 
      return output; 
     } 
    } 

我得到的错误:

The best overloaded method match for 'System.Collections.Generic.List<IFlower>.AddRange(System.Collections.Generic.IEnumerable<IFlower>)' has some invalid arguments 
+0

我没有看到您创建Daisies和Roses集合的位置,因此我们无法看到它们的类型。编译器错误通常意味着函数参数具有错误的类型。你可以添加定义参数的代码吗? – phoog 2011-04-12 03:52:18

回答

1

玫瑰和雏菊令牌必须在每个指到一个类的实例

IEnumerable<IFlower> 

所以我猜想其中一个或两个指的是别的东西。

+0

好吧,我的错误是让'IEnumerable '和'IEnumerable ',并期望它们被连接到'List ':)感谢您的帮助 – Jimbo 2011-06-23 10:36:11

+0

啊哈,也许它会工作,如果你明确地施放它们(这假定IEnumerable <'T>是逆变的,在撰写本文时意味着它必须是C#4.0,而不是silverlight)。换句话说,我希望这个工作:'列表输出=新列表(); output.AddRange((IEnumerable )Daisies); output.AddRange((IEnumerable )Roses);返回输出;' – phoog 2011-06-24 17:45:49