如何创建和使用Collection作为其成员之一的Collection

时间:2011-08-26 03:49:34

标签: c#

我正在尝试创建一个Collection,它将Collection作为其成员之一。该应用程序是跟踪股票价格。

主要收藏品应如下所示:符号,库存名称,(价格收集')

'价格收集'应如下所示:日期,价格

一些示例数据

APPL,Apple
[1/1/2011年,$ 245; 1/2/2011年,$ 247; 1/3/2011年,$ 242; .....]

微软,MS [1/1/2011年,$ 35; 1/2/2011年,$ 32; 1/3/2011年,$ 42, .....]

所以在c#中如何创建一个集合类作为成员的集合类?那么如何访问该集合的“价格集”成员呢? (我已经设法找出了创建并且能够在两个级别添加,但我只能访问顶级才能看到内容。我无法弄清楚如何访问我添加的“价格”也不能看看它的任何方法

4 个答案:

答案 0 :(得分:1)

List<T>是一个泛型类,可以包含任何类型的类实例的集合。因此,只需创建一个类,将另一个集合作为其成员之一(仅示例):

class Stock
{
  public Symbol {get;set;}
  public Name {get;set;}
  public List<Quote> Quotes {get;set;}
}

现在创建一个List<Stock>并为您添加到集合中的每个Stock填充Prices成员,即

var myStocks = new List<Stock>();
Stock stock = new Stock() 
{ 
  Symbol = "MSFT",
  ..
  Quotes = new List<Quote>()
}
myStocks.Add(stock);

您可以像访问任何其他成员一样访问价格:

foreach(Stock stock in myStocks)
{
  foreach(Quote quote in stock.Quotes)
     Console.WriteLine(string.Format("{0} : {1}$", quote.Date, quote.Price));
}

答案 1 :(得分:0)

你可以使用List里面的List。对于您的示例,它可以是

public class PriceList
{
  DateTime priceTime;
  Double price;
}
public class QuoteList
{
  String symbol;
  String stockName;
  PriceList priceCollection;
}

List<QuoteList> myQuote = new List<QuoteList>();

QuoteList将被视为普通的List集合,如整数列表或带有Add,Remove,Fetch操作的字符串列表。

答案 2 :(得分:0)

所以你可能会有一个Stock和一个Price类,例如:

public class Price 
{
    public DateTime Date { get; set; }
    public decimal Price { get; set; }
}

Price类有一个日期和价格属性(我不喜欢这个类的名称,但仅用于说明)。 Price类将用于每个Stock的价格收集:

public class Stock 
{
    private readonly IList<Price> _prices = new List<Price>();

    public string Symbol { get; set; }
    public string Name { get; set; }

    public IList<Price> Prices 
    {
        get { return _prices; }
    }
}

我选择了通用IList来保持简单。还有其他收集对象可供选择,但这应该足以满足您的需求。要获取每个都有Stock个空对象列表的Price个对象列表,您只需构建新的IList<Stock>

IList<Stock> stocks = new List<Stock>();

然后使用Stock集合的新增内容创建并添加Prices个对象:

var appleStock = new Stock { Name = "Apple", Symbol = "APPL" };
appleStock.Prices.Add(new Price { Date = new DateTime(8, 23, 2011), Price = 199.43 });
appleStock.Prices.Add(new Price { Date = new DateTime(8, 25, 2011), Price = 206.28 });

stocks.Add(appleStock);

var googleStock = new Stock { Name = "Google", Symbol = "GOOG" };
googleStock.Prices.Add(/* same as above */);

stocks.Add(googleStock);

一直持续到你建立Stock的列表为止。我已经对数据的来源做了一些基本的假设,所以你的实际代码可能会有很大差异,但我希望这能让你开始。

答案 3 :(得分:0)

class Price
{
  DateTime priceTime;
  Double price;
}
class Quote
{
  String symbol;
  String stockName;
  Price[] priceCollection;
}

List<Quote> myQuote = new List<Quote>();