【问题标题】:List is being emptied in the middle of a method列表在方法中间被清空
【发布时间】:2010-08-29 14:10:54
【问题描述】:

这让我很困惑——我不是页面生命周期方面的专家,但我不明白为什么会发生这种情况。这可能是我声明列表的简单案例。代码如下:

public partial class feedback : System.Web.UI.Page
{
    List<Module> allModules = new List<Module>();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            allModules = getAllModules();

            // Populate dropdown list of modules
            populateModulesDropDown();
...

逻辑是这样的:List 'allModules' 在 getAllMethods() 方法中填充了一个名为 'Module' 的类的对象。我已经调试并逐步完成了每一步的测试。 allModules 的计数应该是 9,但是当我进入下一行运行 populateModulesDropDown() 方法时 - 计数为零。这是怎么回事??

任何帮助都会很棒 - 谢谢

弗兰克

【问题讨论】:

  • 这里没有足够的信息来诊断问题。我要做的是尝试减少问题。开始从您的应用程序中提取功能,直到您拥有能够重现问题的尽可能小的应用程序。到那时,问题对您来说会变得很明显,或者您将拥有足够小的东西,您可以在此处发布所有内容。

标签: c# list variables page-lifecycle


【解决方案1】:

嗯,List 是您类中的一个字段,因此同一类中的其他方法可以访问它。也许某种方法正在清除它或分配它?尝试使用 IDE 查找该字段的所有引用,并查找对该字段的任何分配。

【讨论】:

  • 谢谢,但在这部分代码中唯一能对它做任何事情的方法是 getAllMethods(),它会在获取所有方法并将它们添加到其中之前清除所有方法。有什么想法吗?
【解决方案2】:

因为您没有使用 allModules 的参数调用 populateModulesDropDown,也没有调用 allModules.populateModulesDropDown 的实例

【讨论】:

  • populateModulesDropDown 不使用 allModules 的参数。它只是将其引用为 this.allModules。
  • 好的,让我们从逻辑上解决这个问题。您可以通过调用 getAllModules 来填充 allModules。然后调用一个对 allModules 一无所知的静态函数。这就是为什么你的列表是 0
  • 抱歉,由于之前更改了一些代码并丢失了一行,我返回了一个不同的列表。感谢您的帮助
  • 同意。只需尝试 populateModulesDropDown(allModules)。即使它不起作用,您也将改进您的代码;)(getAllModules() 没有设置实例的字段,但填充.. 与该字段一起使用有点不一致。避免此类事情有助于避免诸如此类的问题你面临的那个即使如果事实证明不是这种特定情况下的原因)
【解决方案3】:

我从 getAllModules() 返回了一个不同的 List 对象,因为之前进行更改时忽略了一行。道歉和感谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多