【问题标题】:Displaying names from a list right after each other in XNA在 XNA 中依次显示列表中的名称
【发布时间】:2012-06-08 04:38:19
【问题描述】:

我不太清楚如何解释,但希望你明白我的意思。

目前我正在尝试从我的数据库中提取所有用户名并放入一个列表中,它可以工作,然后我尝试提取我放入列表中的所有名称,然后将其显示在屏幕,但是我无法正常工作。

我尝试过使用 foreach,但这只会显示列表中的姓氏:

 foreach (var text in allUsers)
                        {
                            message = text.Bruger.ToString();
                        }

这不是我想要的,我想一个接一个地显示每个名字,所以我尝试了这个:

foreach (var text in allUsers)
                        {
                            message += text.Bruger.ToString() + '\n';
                        }

但这只是一遍又一遍地显示相同的内容,列表中只有 4 个名称,但每个名称显示超过 4 次(并且继续显示)。

然后我尝试将 bool 设置为 false,这样当“For”循环运行两次时,它会将 bool 设置为 false,从而停止循环。然而,这确实会停止循环,但是它会在显示所有名称至少 5 次后停止循环(名称从屏幕上用完,所以我只能计算每个名称 5 次)。

该代码如下所示:

bool isDoneAdding = false;

                if (isDoneAdding == false)
                {
                    for (int i = 0; i < 2; i++)
                    {
                        foreach (var text in allUsers)
                        {
                            message += text.Bruger.ToString() + '\n';
                        }
                        if (i == 2)
                        {
                            isDoneAdding = true;
                        }
                    }
                }

这个问题的答案可能很简单,但我还是个新手,我一辈子都搞不明白。

提前致谢。

编辑

这是我将所有用户添加到列表的地方:

        List<User> allUsers = new List<User>();

 MathAndYouDBEntities db = new MathAndYouDBEntities();


            foreach (User user in db.Users)
            {
                allUsers.Add(user);

            }

【问题讨论】:

  • 您确定返回的“文本”变量是个人用户吗? “布鲁格”指的是什么?此外,底部代码段将产生与中间代码段相同的结果,但它会执行两次。如果您使用的是传统的 for 循环,那么您可能也不想在内部使用 foreach。
  • Bruger 是丹麦语中“用户”的意思,它基本上就是我的数据库中调用的表,是的,我已经通过调试检查过,它运行所有这些,然后发布最后一个它得到。但是,对于 += ,它只是出于某种原因不断添加它们,而不是停止。
  • 我怀疑 allUsers 实际上并不是数据库中所有用户的集合……至少,不是 C# foreach 循环可以遍历的形式。
  • 我将在上面的代码示例中添加“allUsers”所在的位。
  • 看起来应该可以,但也有点多余。您的主要逻辑可以直接使用 foreach(db.Users 中的用户用户) - 无需将它们放入单独的列表中。

标签: c# list loops for-loop foreach


【解决方案1】:

从您的问题文本中,我了解到 allUsers 的内容是正确的(即 4 项),并且 foreach 循环执行了多次。

此外,您对布尔值的尝试无法正常工作,因为它永远不会进入 isDoneAdding = true; 语句,因为 for 循环是针对 i = 0 和 i = 1 执行的,并且会在 i 达到值 2 之前退出。即使该语句会被执行(例如将条件设置为 i == 1),foreach 也会被执行两次,而不仅仅是一次。

要使用 bool,您应该这样做:

bool isDoneAdding = false;

if (!isDoneAdding)
{
    foreach (var text in allUsers)
    {
         message += text.Bruger.ToString() + '\n';
    }
}
else
{
    isDoneAdding = true;
}

但是,如果您说 foreach 执行了 4 次,我认为这不会起作用。我不知道您的问题的上下文,但假设您的代码是为了响应某个事件而执行的,并且该事件被多次触发。然后,您可能拥有在包含 for 循环的方法之外定义的 message 变量(可能是实例变量?)并且只被初始化一次。如果是这种情况,您应该在定义消息的同一位置定义您的 isDoneAdding。

【讨论】:

  • 刚试了你的方法,没用。我仍然得到无限循环,它不断添加名称,一次又一次地在屏幕上快速滚动显示所有名称的文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多