如何将带有int数组的double转换为ToString覆盖?

时间:2017-03-09 18:26:41

标签: c# arrays struct override tostring

enter image description here

struct SSales
{
    private int[] _years;
    private double[] _sales;
    private Random salesran;

    public SSales (int [] yeararr, double[] salesarr)
    {
        //yeararr = Enumerable.Range(2000, 10).ToArray();
        _years = yeararr;
        _sales = salesarr;
        double max = 50000.00;
        double min = 1000.00;
        salesran = new Random();
        for (int i = 0; i < yeararr.Length; i++) 
        {
            for (int j = 0; j < salesarr.Length; j++)
            {
                salesarr[j] = Math.Round((salesran.NextDouble() * (max - min) + min), 2);                         
            }
        }
    }

    public override string ToString()
    {
        string itemstring; //string.join?
        return itemstring;
    }

嗨!我是一名新的C#学生,我在使用结构方面遇到了一些困难。当按下generate按钮时,它应该调用struct SSales并为每年生成10个随机销售数字,并使用ToString覆盖将它们输入到列表框中,如上图所示。

编辑tostring覆盖应格式为:

int []年+&#34;空白空间&#34; +&#34; $&#34; +双[]销售。

我必须使用int []和double []。

我知道我应该使用string.Join,但我无法弄清楚如何将两个不同类型的数组组合成一个字符串数组。生成数组工作正常,我测试了它,我只需要知道如何使用ToString覆盖。任何帮助将不胜感激!

编辑2我还应该注意,我也使用冒泡排序来组织这些生成,这可能会使一些答案复杂化。

private void Sortbutton_Click(object sender, EventArgs e)
    {
        if (yearradio.Checked)
        {
            int temp = 0;
            for (int i = 0; i < yeararr.Length; i++)
            {
                for (int j = 0; j < yeararr.Length; j++)
                {
                    if (yeararr[i] < yeararr[j])
                    {
                        temp = yeararr[i];
                        yeararr[i] = yeararr[j];
                        yeararr[j] = temp;
                    }
                }
            }
        }

        if (salesradio.Checked)
        {
            double temp2 = 0.0;
            for (int i = 0; i < salesarr.Length; i++)
            {
                for (int j = 0; j < salesarr.Length; j++)
                {
                    if (salesarr[i] > salesarr[j])
                    {
                        temp2 = salesarr[i];
                        salesarr[i] = salesarr[j];
                        salesarr[j] = temp2;
                    }
                }
            }
        }
        //   for (int i = 0; i < yeararr.Length; i++)
        // {
        //    for (int j = 0; j < salesarr.Length; j++)
        //    {
        //        listBox1.Items.Add();
        //    }
        // }
    }

1 个答案:

答案 0 :(得分:2)

你不应该在结构中拥有数组。该结构应该包含一年的信息:

struct SSales
{
    public int Year { get; private set; }
    public double Sales { get; private set; } // This should REALLY be decimal type

    public SSales(int year, double sales) : this()
    {
        Year = year;
        Sales = sales;
    }

    public override string ToString()
    {
        return string.Format("{0}    ${1:F2}", Year, Sales);
    }
}

然后,您可以在应用程序中使用单个销售数组:

Random salesran = new Random();
SSales[] sales = new SSales[10];
for (int i = 2000;i < 2010;++i)
    sales[i] = new SSales(i, /* random number like you have */);

现在,当您将销售数组对象添加到列表框时,它们将根据您的结构的ToString()覆盖进行列出。