1

在一个对象中,我有:

public IEnumerable<voiture> recup_voitures()
{
    foreach (voiture v in _arrVCollection)
    {
        yield return (v);
    }
}

voiture是一个结构并且_arrVCollection是一个包含一些结构体的数组。

在我的主要课程中,我有:

 foreach (CarCollection.voiture o in collection.recup_voitures())
 {
     //some code to display the content of each struct
 }

发生的事情是,如果我有一个长度为 5 的数组并且其中只有 1 个 struct voiture,它将显示代码 5 次而不是仅 1 次。我做错了什么?

4

2 回答 2

5

如果您正在创建长度为 5 的结构数组,这意味着数组将包含使用默认构造函数构造的 5 个结构。

voiture[] arr = new voiture[5];
arr[0] = some_non-default_voiture;

在这种情况下,您的数组将包含一个非默认voiture实例和四个默认实例。

要仅获取一个voiture实例,您可以创建长度为 1 的数组,或使用List<T>

List<voiture> = new List<voiture> { new voiture() };

如果您确实需要处理长度为 5 的数组,请考虑使用可空类型:

voiture?[] _arrVCollection = new voiture?[5];
_arrVCollection[0] = new voiture();

并像这样枚举:

public IEnumerable<voiture> recup_voitures()
{
    foreach (voiture? v in _arrVCollection)
    {   if (v.HasValue)
            yield return v.Value;
    }
}

编辑:

正如 Servy 提到的,方法recup_voitures()可以用 linq 重写:

public IEnumerable<voiture> recup_voitures()
{
    return _arrVCollection.Where(x => x.HasValue).Select(x => x.Value);
}
于 2012-11-04T15:47:24.803 回答
0

在您当前的代码中,您会遇到异常。

如果将是类,您可以在recup_voitures方法中更改代码:voiture

 public static IEnumerable<voiture> recup_voitures()
        {
            foreach (voiture v in _arrVCollection)
            {
                if (v != null)
                    yield return (v);
            }
        }
于 2012-11-04T15:51:34.567 回答