我有一个列表框,里面有不同的蛋糕。如何为每个蛋糕定价并让我的标签显示所选蛋糕的总成本?以下是我到目前为止的代码。
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;
}
任何建议都表示赞赏。
答案 0 :(得分:1)
假设这是一个桌面应用程序,您可能希望将价格放在配置文件中,以便以后更改它们。您可以在App.config文件中添加<appSettings>
块,并为每个蛋糕添加一个条目,然后使用ConfigurationManager.AppSettings[]
命令检索它们。
因此,如果这是一个Windows窗体应用程序,那么在表单加载时,您可以进入您的应用程序设置,检索所需的所有蛋糕的详细信息,然后在列表框中填入每个条目的条目(请参阅{{ 3}})。这样,您就可以为每个条目动态创建文本。如果您希望每行包含价格,您必须将其硬编码到行的文本中。 (我想这就是你要问的......)
最后一点说明。你不应该使用+来连接字符串。 C#中的字符串是不可变的 - 这意味着字符串本身不能被修改(原因是我可以解释的其他主题,如果你愿意的话)。为了用“+”连接两个字符串,C#需要创建第三个字符串并用前两个字符串的内容填充它,这会消耗性能。要更有效地连接字符串,请使用StringBuilder
对象和Append()
方法,或使用String.Format()
,其工作方式相同。
不可变字符串:
其核心的字符串是字符数组。正如您无法调整数组大小一样,您无法调整字符串的大小。这是因为数组存储在堆栈中...堆栈是一块内存,其中包含运行程序的指令,这些指令全部“堆叠”在一起。堆栈内存是预先分配的,并且出于所有意图和目的,您无法动态更改堆栈上对象的内存占用。您可以拥有包含5个整数和5个空格的10个整数数组,但不能使用int[5]
并将其更改为int[10]
。如果要向int[5]
添加5个以上的整数,则需要实例化新的int[10]
并填写它。字符串也是如此。
使用列表及其派生词处理数组大小调整问题的解决方案。它们使用堆内存运行。这类似于StringBuilder对象的运行方式。如果您想了解有关堆栈和堆内存以及它如何影响程序运行方式的更多信息,这可能有助于您更好地理解http://msdn.microsoft.com/en-us/library/z38x31c0.aspx。知道这一点非常重要,因为它可以解释许多将使初学者程序员陷入困境的谜团。对你有好处。
答案 1 :(得分: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);