gpt4 book ai didi

c# - 使用未分配的局部变量? C#

转载 作者:行者123 更新时间:2023-11-30 15:44:44 25 4
gpt4 key购买 nike

我有以下代码:

        double ticketPrice;
LoadOperation loGetTickets = ticketClass.loadTickets();
loGetTickets.Completed += (s, args) =>
{
foreach (Web.Ticket tt in ticketClass.getContext())
{
if (tt.bookingId == data.bookingId)
{
pView.lblTicketAmount.Content = "£" + tt.ticketPrice;
MessageBox.Show("Price: " + tt.ticketPrice);
ticketPrice = Convert.ToDouble(tt.ticketPrice);
pView.lblTicketName.Content = tt.ticketName;
break;
}
}
}; double subTotal = ticketPrice + ticketQuantity;

当我运行它时,出现错误:使用未分配的局部变量“ticketPrice”

如您所见,它确实被分配了一个来自循环的值。

如果我使用:

double ticketPrice = 0.0;

错误出现但随后值保持在 0.0,但我不明白,因为消息框每次都出现并输出值,所以我假设 tt 的值.ticketPrice 正在填充 ticketPrice

谁能帮我解决这个问题。

谢谢

最佳答案

您是说 ticketPrice 的值保持为零,但代码没有显示您读取变量值的位置!

如果在您发布的代码段后面的某些代码中使用该行为,则该行为是有意义的。例如:

double ticketPrice;        
LoadOperation loGetTickets = ticketClass.loadTickets();
loGetTickets.Completed += (s, args) => {
// Set value of 'ticketPrice'
ticketPrice = ...
};

// Use the value of the variable
Console.WriteLine(ticketPrice); // (*)

这行不通,因为标记为 (*) 的行实际上在 变量值设置在 Completed 之前完成> 处理程序。要使其正常工作,您需要将使用该变量的代码移动到处理程序中(在设置变量值的代码之后)。

当然,在方法中声明变量是没有意义的,因为它只会在 lambda 函数的主体中使用,所以你最终会得到这样的东西:

LoadOperation loGetTickets = ticketClass.loadTickets();        
loGetTickets.Completed += (s, args) => {
double ticketPrice;
// Set value of 'ticketPrice'
ticketPrice = ...

// Use the value of the variable
Console.WriteLine(ticketPrice); // (*)
};

我相信您刚刚发现了 C# 4 中异步编程的痛点:-)。这就是为什么 F# 支持异步工作流(您可以在其中编写没有事件处理程序的相同代码)以及为什么 C# 设计者正在考虑在未来向 C# 添加类似的东西。

关于c# - 使用未分配的局部变量? C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5862723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com