Переопределение ToString для возврата массива - PullRequest
0 голосов
/ 10 марта 2020

Я хотел создать программу wpf, чтобы при нажатии кнопки «Создать» класс SSales получал / сохранял массивы значений в классе, а затем возвращал его в список. Новенький тут. Извините.

   private void GenerateButton_Click(object sender, EventArgs e)
   {
        Random rand = new Random();

        int[] year = { 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 };

        double[] Sales = new double[10];

        for (int i = 0; i < 10; i++)
        {
            Sales[i] = rand.Next(1000, 50000);

        }

        SSales yearSale = new SSales(year, Sales);

        for (int j = 0; j < 10; j++){

        //I want the listbox to display the values of yearSale.Year and yearSale.Sales

            listBox1.Items.Add(yearSale);
        }
    }

public class SSales
{
    public int[] Year { get; set; }
    public double[] Sales { get; set; }

    public SSales(int[] iYear, double[] dSales)
    {
        Year = iYear;
        Sales = dSales;
    }

    public override string ToString()
    { 
       //I'm trying to make this format "2001     $25,000.00" then return it to listbox

        return string.Format("{0}\t\t{1:C0}", Year, Sales);  
    }

}

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Поскольку вы добавляете 10 SSales объектов к ListBox, каждый объект должен принимать один int и один double:

public class SSales
{
    public int Year { get; set; }
    public double Sales { get; set; }

    public SSales(int iYear, double dSales)
    {
        Year = iYear;
        Sales = dSales;
    }

    public override string ToString()
    {
        return string.Format("{0}\t\t{1:C0}", Year, Sales);
    }
}

Попробуйте это:

private void GenerateButton_Click(object sender, EventArgs e)
{
    Random rand = new Random();

    int[] year = { 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 };

    double[] Sales = new double[10];

    for (int i = 0; i < 10; i++)
    {
        Sales[i] = rand.Next(1000, 50000);
    }

    for (int j = 0; j < 10; j++)
    {
        listBox1.Items.Add(new SSales(year[j], Sales[j]));
    }
}
0 голосов
/ 10 марта 2020

Это не то, как вы используете ToString - он не должен возвращать массив.

Вместо этого вы должны создать функцию на SSales, которая принимает параметр, и который даст вам отформатированный результат продажа вы хотите. Примерно так:

publi c string GetFormattedSale (int s) {string.Format ("{0} \ t \ t {1: C0}", Year [s], Sales [s]) ;
}

Затем вы можете вызвать это с помощью кода нажатия кнопки, например:

listBox1.Items.Add (yearSale.GetFirmattedSale (j));

Если вам действительно нужно использовать ToString, вам нужно создать другой класс, содержащий данные для одной продажи, а не все 10 продаж. Затем вы можете реализовать ToString только на этой единственной продаже.

...