0

我从下面的代码中得到了各种编译错误。当我有如下所示的列表设置时,我不太确定如何将项目添加到列表中。我不想基本上维护 StockEntry 类中设置的值,而是使用 StockItem 类作为计数。使用... _stocks.Value.Count++

public class StockEntry
{
  public string Name;
  public PeriodType Period;
  public int Min;


  public StockEntry(string Name, PeriodType Period, int Min)
  {
    this.Name = Name;
    this.Period = Period;
    this.Min = Min;
  }
}

public class StockItem<T>
{
  public T Value;

  public StockItem() {} 
  public StockItem(T val) {Value = val;}    
}

 List<StockItem<StockEntry>> _stocks = new List<StockItem<StockEntry>>();

 protected override void Initialize()
 {                                  
  _stocks.Add(new StockItem(StockEntry("ABC", PeriodType.Minute, 5)));          
  _stocks.Add(new StockItem(StockEntry("ACE", PeriodType.Minute, 5)));
  _stocks.Add(new StockItem(StockEntry("ACN", PeriodType.Minute, 5)));
 }
4

3 回答 3

3

除此之外,这可能是问题所在:

_stocks.Add(new StockItem(StockEntry("ABC", PeriodType.Minute, 5)));  

(以及类似的行)。

StockItem是一个泛型类,所以你需要指定类型参数:

_stocks.Add(new StockItem<StockEntry>(StockEntry("ABC", PeriodType.Minute, 5)));

如果您想避免这种有些多余的规范,您可以在非泛型类型中创建一个静态泛型方法:

// Overload StockItem<T> by generic arity
public static class StockItem
{
    public static StockItem<T> Of(T item)
    {
        return new StockItem<T>(item);
    }
}

然后:

_stocks.Add(StockItem.Of(StockEntry("ABC", PeriodType.Minute, 5)));

也就是说,目前还不清楚为什么StockItem首先需要通用。而且我肯定会避免使用公共领域——至少让它成为一个自动实现的属性。(理想情况下,IMO 将其设置为由构造函数中设置的只读字段支持的只读属性,并删除无参数构造函数。但我喜欢不变性。)同样,我会摆脱StockEntry.

于 2013-10-05T19:23:44.957 回答
2

我想如果你new在这一行添加关键字:

_stocks.Add(new StockItem(StockEntry("ABC", PeriodType.Minute, 5)));

你的问题将得到解决。

_stocks.Add(new StockItem(new StockEntry("ABC", PeriodType.Minute, 5)));
于 2013-10-05T19:28:25.757 回答
0

_stocks 和 Initialize 需要成为一个类的一部分——它们目前不是。

大概您希望它们成为 StockItem 的一部分:

public class StockItem<T>
{
  public T Value;

public StockItem() {} 
public StockItem(T val) {Value = val;}  
} // The class StockItem ends with this bracket
于 2013-10-05T19:27:45.633 回答