如何通过HashSet枚举?

时间:2015-09-05 07:22:28

标签: c#

我有一个像这样定义的对象:

public class Problem
{
    public Problem()
    {
        this.Questions = new HashSet<Question>();
    }

    public string Answer { get; set; }
}

我需要检查对象problem中的每个问题并操纵一些数据。这是我尝试过的:

foreach (Question question in problem)
{
    if (question.AssignedTo == null)
    {
        question.QuestionStatusId = 6;
    }
    else
    {
        question.AssignedDate = DateTime.UtcNow;
        question.QuestionStatusId = 5;
    }
}

但这不起作用。我收到一条错误消息:

  

严重级代码说明项目文件行   错误CS1579 foreach语句无法对“Entities.Models.Core.Problem”类型的变量进行操作,因为   'Entities.Models.Core.Problem'不包含'GetEnumerator'的公共定义

我还能采取其他方式吗?请注意,我使用new HashSet<Question>的原因是因为我被告知如果有独特的问题,这是执行此操作的方法。

1 个答案:

答案 0 :(得分:5)

您需要指定要迭代HashSet中包含的Problem,而不是Problem本身:

foreach (Question question in problem.Questions) {
    ...
}

由于HashSet的性质,问题可能以任何顺序出现。如果您想维护问题的特定顺序,则应使用List。确实HashSet的元素是唯一的,但这并不意味着如果您的元素是唯一的,那么 使用HashSet