c# - 使用枚举器在数组中显示结构

标签 c# arrays oop struct iterator

在我的对象中:

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

voiture 是一个结构,_arrVCollection 是一个包含一些结构 voiture 的数组。

在我的主课上我有:

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

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

最佳答案

如果您正在创建长度为 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);
}

关于c# - 使用枚举器在数组中显示结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13220032/

相关文章:

c# - .NET Core 3 迁移的其他探测路径

c# - 生成数组并仅获取高于平均值的数字

c# - 404 在 C# WebApi 上找不到

c++ - 包装数据结构

c# - 向 XML 文件添加注释并使用 C# 读入

ios - 插入数组并比较日期 Swift iOS 代码

c++ - 代码 : How to address dynamic Variables?

arrays - 如何订阅 channel 数组Node + Redis

java - ArrayList 中的类型不匹配与多态性

java - 编程一对多关系