【问题标题】:ToString override to return arrayToString 覆盖以返回数组
【发布时间】:2020-03-10 03:23:52
【问题描述】:

我想制作一个 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);  
    }

}

【问题讨论】:

  • 我建议创建一个返回格式化字符串的只读属性,而不是覆盖ToString,然后将ListBoxDisplayMemberPath 设置为该属性的名称。
  • 有什么问题?不知道是什么问题。
  • listBox1.Items.Add(yearSale.ToString()); ?
  • 在 WPF 中,您通常会使用带有两列 GridView 的 ListView。然后将 SSales 类转换为保存 single 年销售额的东西,即两个属性 int Yeardouble Sales。然后将Sales对象的集合赋给ListView的ItemsSource属性,并在两列模板中绑定这两个属性。从这里开始阅读:Data Templating Overview.

标签: c# arrays tostring


【解决方案1】:

由于您要向ListBox 添加10 个SSales 对象,因此每个对象应接受一个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]));
    }
}

【讨论】:

  • 如何随机化数组中元素的索引,以便每次单击生成按钮时都会有一个随机位置? TIA!
  • @JustinLopez:如果您还有其他问题,请提出一个新问题。
【解决方案2】:

这不是你使用 ToString 的方式——它不应该返回一个数组。

相反,您应该在 SSales 上创建一个带有参数的函数,该函数将为您提供所需的格式化结果。像这样的:

公共字符串 GetFormattedSale(int s) { string.Format("{0}\t\t{1:C0}", Year[s] , Sales[s]);
}

然后您可以从按钮单击代码中调用它,如下所示:

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

如果您确实必须使用 ToString,您需要创建另一个包含单次销售数据的类,而不是全部 10 次销售。然后,您可以在单次销售中实现 ToString。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2012-05-04
    相关资源
    最近更新 更多