Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用枚举器显示数组中的结构_C#_Arrays_Oop_Struct_Iterator - Fatal编程技术网

C# 使用枚举器显示数组中的结构

C# 使用枚举器显示数组中的结构,c#,arrays,oop,struct,iterator,C#,Arrays,Oop,Struct,Iterator,在一个对象中,我有: public IEnumerable<voiture> recup_voitures() { foreach (voiture v in _arrVCollection) { yield return (v); } } 发生的情况是,如果我有一个长度为5的数组,其中只有1个struct voiture,它将显示代码5次,而不是仅显示1次。我做错了什么?如果创建长度为5的结构数组,则表示数组将包含5个使用默认构造函数构造的

在一个对象中,我有:

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

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

如果创建长度为5的结构数组,则表示数组将包含5个使用默认构造函数构造的结构

voiture[] arr = new voiture[5];
arr[0] = some_non-default_voiture;
在这种情况下,数组将包含一个非默认的
voiture
实例和四个默认实例

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

并列举如下:

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

若要创建长度为5的结构数组,则表示数组将包含5个使用默认构造函数构造的结构

voiture[] arr = new voiture[5];
arr[0] = some_non-default_voiture;
在这种情况下,数组将包含一个非默认的
voiture
实例和四个默认实例

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

并列举如下:

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

在当前代码中,您会得到异常

如果
voiture
将为class,则可以在
recup\u voitures
方法中更改代码:

 public static IEnumerable<voiture> recup_voitures()
        {
            foreach (voiture v in _arrVCollection)
            {
                if (v != null)
                    yield return (v);
            }
        }
public static IEnumerable recup_voitures()
{
foreach(voiture v in_arrVCollection)
{
如果(v!=null)
收益率(v);
}
}

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

如果
voiture
将为class,则可以在
recup\u voitures
方法中更改代码:

 public static IEnumerable<voiture> recup_voitures()
        {
            foreach (voiture v in _arrVCollection)
            {
                if (v != null)
                    yield return (v);
            }
        }
public static IEnumerable recup_voitures()
{
foreach(voiture v in_arrVCollection)
{
如果(v!=null)
收益率(v);
}
}

长度为5,但其中只有1个结构变量的数组是什么意思?
voiture[]anArray=new voiture[5]然后
anArray[0]=new voiture()
没有理由在该方法中
产生收益
;您可以直接返回
\u arrVCollection
,因为它包含
IEnumerable
。什么是长度为5的数组,但其中只有1个struct voiture?
voiture[/anArray=new voiture[5]然后
anArray[0]=new voiture()
没有理由在该方法中
产生收益
;您可以直接返回
\u arrVCollection
,因为它包含
IEnumerable
。它们在结构上永远不会为空。。。我的错误。我认为voiture是一个类。它们从来都不是空的,因为它们是结构化的。。。我的错误。我以为voiture是一门课。你的最后一个方法很有魅力!非常感谢。现在我开始阅读什么是可空类型:)而不是在第二种情况下使用迭代器块,您只需
return\u arrVCollection.Where(v=>v.HasValue)@Servy,强烈同意。只是用OP风格写的。你的最后一个方法很有魅力!非常感谢。现在我开始阅读什么是可空类型:)而不是在第二种情况下使用迭代器块,您只需
return\u arrVCollection.Where(v=>v.HasValue)@Servy,强烈同意。只是用OP风格写的。
 public static IEnumerable<voiture> recup_voitures()
        {
            foreach (voiture v in _arrVCollection)
            {
                if (v != null)
                    yield return (v);
            }
        }