使用不同类中的制作列表

时间:2018-04-20 12:37:25

标签: c# list class methods

我使用下一个脚本制作了一个列表:

private void Skills_Button_Click(object sender, RoutedEventArgs e)
{
...
var dict = JsonConvert.DeserializeObject<Dictionary<string, Item>>(Database);

List<String> Item_Name = new List<String>();
List<double> Sell_Price = new List<double>();
List<double> Buy_Price = new List<double>();

foreach (string key in dict.Keys)
{
    Item_Name.Add(dict[key].name);
    Sell_Price.Add(Convert.ToDouble(dict[key].sell_average));
    Buy_Price.Add(Convert.ToDouble(dict[key].buy_average));
}

}

然后,我创建了一个方法:

public double S(string name, List<String> Item_Name, List<double> Sell_Price)
{
    int ind = Item_Name.FindIndex(s=> s==name);
    double SP = Sell_Price[ind];

    return SP;
}

最后,我想在另一种方法中使用此方法(当在wpf中按下按钮时),但是我收到一个错误,即该类中未知列表Item_Name,Sell_Price,Buy_Price。 / p>

如何让它们成为其他课程的“全球”?

我在这里找到的所有答案都说明了创建的新列表。

谢谢。

2 个答案:

答案 0 :(得分:0)

首先,我将属性包装到单个模型中。 请注意,我使用decimal而不是double,因为这是处理货币时的建议。

public sealed class ItemModel
{
    public ItemModel(string itemName, decimal sellPrice, decimal buyPrice)
    {
        ItemName = itemName;
        SellPrice = sellPrice;
        BuyPrice = buyPrice;
    }

    public string ItemName { get; }
    public decimal SellPrice { get; }
    public decimal BuyPrice { get; }
}

然后我会设计我的班级,让一个可枚举的成员存储结果

class WhateverYourClassIsCalled
{
    private IEnumerable<ItemModel> items;

    private void Skills_Button_Click(object sender, RoutedEventArgs e)
    {
        items = GetItems();
    }

    private IEnumerable<ItemModel> GetItems()
    {
        IReadOnlyDictionary<string, Item> dictionary = JsonConvert
            .DeserializeObject<Dictionary<string, Item>>(database);

        foreach (KeyValuePair<string, Item> item in dictionary)
        {
            yield return new ItemModel(
                itemName: item.Key,
                sellPrice: item.Value.sell_average,
                buyPrice: item.Value.buy_average);
        }
    }

    // You called this method, "S", which is a poor name!
    private decimal GetSellPrice(string itemName)
    {
        // Notice that SingleOrDefault here might be null, so have a think about how you want to handle that.
        return items
            .SingleOrDefault(item => item.ItemName == itemName)
            .SellPrice;
    }
}

<强>优点

  • 您的项目数据已封装(查看OOP的4个支柱)。
  • 您的商品数据不会因存储在不同的成员中而断开连接(您只需处理items而不是Item_NameSell_PriceBuy_Price)。< / LI>
  • 您的items成员是安全的,因为您无法添加,删除或清除该集合。您只能迭代它或重新分配它。
  • 方法分为明确的职责。
  • 您的ItemModel是不可变的,这在大多数案例中都是件好事。

答案 1 :(得分:-1)

在这种情况下,你将它提取到一个公共方法,它返回所有这些数据,如下所示,并在需要的地方调用它

public Tuple<List<String>, List<Double>, List<Double>> GetEventData(Database db)
{
var dict = JsonConvert.DeserializeObject<Dictionary<string, Item>>(db);

List<String> Item_Name = new List<String>();
List<double> Sell_Price = new List<double>();
List<double> Buy_Price = new List<double>();

foreach (string key in dict.Keys)
{
    Item_Name.Add(dict[key].name);
    Sell_Price.Add(Convert.ToDouble(dict[key].sell_average));
    Buy_Price.Add(Convert.ToDouble(dict[key].buy_average));
}

Tuple t = Tuple.Create(Item_Name, Sell_Price, Buy_Price);
return t;
}