在XNA中相继显示列表中的名称

时间:2012-06-04 02:22:05

标签: c# list loops for-loop foreach

我不太确定如何解释这个,但希望你明白我的意思。

目前我正在尝试从我的数据库中取出所有用户名并放入列表,然后它可以工作,然后我尝试将所有已放入列表的名称拉出来然后显示在屏幕,但我不能让这个工作。

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

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

这不是我想要的,我想在彼此之后显示每个名字,所以我尝试了这个:

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

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

然后我尝试制作一个设置为false的bool,这样当“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);

            }

1 个答案:

答案 0 :(得分:2)

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

此外,使用布尔值的尝试无法工作,因为它永远不会输入isDoneAdding = true;语句,因为for循环是针对i = 0和i = 1执行的,并且在我获得值之前将退出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循环的方法之外定义(可能是一个实例变量?)并且只初始化一次。如果是这种情况,您应该在定义消息的同一位置定义isDoneAdding。