0

我有一个列表框,里面有不同的蛋糕。如何给每个蛋糕定价,并让我的标签显示所选蛋糕的总成本?以下是我到目前为止的代码。

for (int index = 0; index < lstCakes.SelectedItems.Count; index++)
        {
            strCakes += Environment.NewLine + lstCakes.SelectedItems[index].ToString();
        }

double tax = 1.13;
        lblOrdered.Text = "You have ordered: " + strCakes + '\n' + "Total Cost: " + (tax * cakeCost).ToString("C");

我尝试使用如下开关,但这仅显示最后一个选定项目的成本。

switch (lstCakes.SelectedIndex)
        {
            case 0:
                if (lstCakes.SelectedIndex == 0)
                {
                    cakeCost = 18;
                }
                break;
            case 1:
                if (lstCakes.SelectedIndex == 1)
                {
                    cakeCost = 25;
                }
                break;
            case 2:
                if (lstCakes.SelectedIndex == 2)
                {
                    cakeCost = 40;
                }
                break;
            case 3:
                if (lstCakes.SelectedIndex == 3)
                {
                    cakeCost = 30;
                }
                break;
        }

任何建议表示赞赏。

4

2 回答 2

1

假设这是一个桌面应用程序,您可能希望将您的价格放在一个配置文件中,以便以后可以更改它们。您在 App.config 文件中添加一个<appSettings>块,其中包含每个蛋糕的条目,然后使用 ConfigurationManager.AppSettings[]命令检索它们。

因此,如果这是一个 Windows 窗体应用程序,那么在表单加载时,您可以进入您的应用程序设置,检索您想要的所有蛋糕的详细信息,然后用每个条目填充您的列表框(请参阅http://msdn .microsoft.com/en-us/library/z38x31c0.aspx)。这样,您可以为每个条目动态创建文本。如果您希望每一行都包含价格,则必须将其硬编码到该行的文本中。(我想这就是你要问的......)

最后一点。您不应该使用 + 来连接字符串。C# 中的字符串是不可变的——这意味着字符串本身不能被修改(原因是另一个话题,如果你愿意,我可以解释)。为了用“+”连接两个字符串,C# 需要创建第三个字符串并用前两个的内容填充它,这会消耗性能。要更有效地连接字符串,请使用StringBuilder对象和Append()方法,或者使用String.Format()以相同方式工作的方法。


不可变字符串:

字符串的核心是字符数组。正如您无法调整数组的大小一样,您也无法调整字符串的大小。这是因为数组存储在堆栈中......堆栈是一块内存,其中充满了运行程序的指令,这些指令都“堆叠”在彼此之上。堆栈内存是预先分配的,并且出于所有意图和目的,您无法动态更改堆栈上对象的内存占用。您可以拥有一个包含 5 个整数和 5 个空格的 10 个整数数组,但您不能将 aint[5]更改为int[10]. 如果您想再添加 5 个整数,则int[5]需要实例化一个新整数int[10]并填充它。字符串也是如此。

数组大小调整问题的解决方案是使用列表及其衍生物来处理的。它们使用堆内存运行。这类似于 StringBuilder 对象的功能。如果您想了解更多关于堆栈和堆内存以及它如何影响程序运行方式的信息,这可能会帮助您更好地理解http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx。知道这一点真的很重要,因为它可以解释很多会让初学者感到困惑的谜团。很适合你问。

于 2012-10-27T18:08:11.727 回答
0

蛋糕价格可以维持在 Enum 上

enum CakePrices{
ChocCake = 20,
VanillaCake = 50
}

计算成本:

int TotalCost;
for (int index = 0; index < lstCakes.SelectedItems.Count; index++)
{
  strCakes += Environment.NewLine + lstCakes.SelectedItems[index].ToString();

  //The name of the List Items should match the names on the enum,for this to work
  TotalCost += (int)Enum.Parse(typeof(CakePrices),
                               lstCakes.SelectedItems[index].ToString() ,
                               false)
}

Console.WriteLine("You have ordered:" + strCakes + '\n' + "Total Cost: " + TotalCost);
于 2012-10-27T18:17:14.677 回答