如何通过HashSet枚举?

3 c#

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

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

    public string Answer { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

但这是行不通的。我收到一条错误消息:

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

我还有其他方法可以做到这一点吗?请注意,使用new HashSet<Question>我的原因是因为有人告诉我这是解决唯一问题的方法。

Aas*_*set 8

您需要指定您希望遍历HashSet包含在了Problem,而不是Problem本身:

foreach (Question question in problem.Questions) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

HashSet但是,由于的性质,问题可能会以任何顺序出现。如果您要为问题维持特定顺序,则应使用List。的确,a的元素HashSet是唯一的,但这并不意味着如果元素是唯一的必须使用a HashSet

  • 请注意,可以使用 SortedSet 维护特定顺序。 (2认同)