Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# 为什么我的foreach循环只循环一次,即使有3个项目?_C#_.net - Fatal编程技术网

C# 为什么我的foreach循环只循环一次,即使有3个项目?

C# 为什么我的foreach循环只循环一次,即使有3个项目?,c#,.net,C#,.net,下面是一个示例代码。我的循环仅循环一次,即使其中有三项项目[0]。持续时间仅返回添加的顶部项目。它不是在集合中循环 有什么想法吗 public class DurationModel { public string Duration { get; set; } public IEnumerable<List<DurationModel>> GetDurationItems() { List<DurationModel>

下面是一个示例代码。我的循环仅循环一次,即使其中有三项<代码>项目[0]。持续时间仅返回添加的顶部项目。它不是在集合中循环

有什么想法吗

public class DurationModel
{
    public string Duration { get; set; }

    public IEnumerable<List<DurationModel>> GetDurationItems()
    {
        List<DurationModel> durationItems = new List<DurationModel>();

        durationItems.Add(new DurationModel()
        {
            Duration = "1 Day"
        });

        durationItems.Add(new DurationModel()
        {
            Duration = "1 Week"
        });

        durationItems.Add(new DurationModel()
        {
            Duration = "1 Month"
        });

        yield return durationItems;
    }
}

public class MyForm
{
    private ObservableCollection<string> _durationItems = new ObservableCollection<string>();
    private IEnumerable<List<DurationModel>> _durationModel = new DurationModel().GetDurationItems();

    public MyForm()
    {
        GetData();
    }

    private void GetData()
    {
        foreach (var items  in _durationModel)
        {
            _durationItems.Add(items[0].Duration);
        }
    }   
}
公共类持续时间模型
{
公共字符串持续时间{get;set;}
公共IEnumerable GetDurationItems()
{
List durationItems=新列表();
添加(新的DurationModel()
{
持续时间=“1天”
});
添加(新的DurationModel()
{
持续时间=“1周”
});
添加(新的DurationModel()
{
持续时间=“1个月”
});
收益率-收益持续时间项;
}
}
公共类MyForm
{
私有ObservableCollection _durationItems=新ObservableCollection();
private IEnumerable_durationModel=新durationModel().GetDurationItems();
公共MyForm()
{
GetData();
}
私有void GetData()
{
foreach(持续时间模型中的var项目)
{
_durationItems.Add(项[0]。持续时间);
}
}   
}

收益回报期限项目
您只返回一个类型为
List
的项目。列表实现了
IEnumerable
,或者换句话说,是一个
IEnumerable
。因此,返回类型必须是
IEnumerable
而不是
IEnumerable
,这将适合于返回
DurationModels
列表的枚举

将方法更改为

public IEnumerable<DurationModel> GetDurationItems()
{
    yield return new DurationModel { Duration = "1 Day" };
    yield return new DurationModel { Duration = "1 Week" };
    yield return new DurationModel { Duration = "1 Month" };
}
您也可以使用
列表

请注意,
yield return
使方法暂停,记住其状态并返回。当
foreach
请求下一项时,该方法在最后一次
返回后恢复。(另见Lars Corneliussen)

使用第一种方法,项目在循环中使用时创建。对于第二个循环,它们都是在循环开始时创建的

yield return
允许您通过算法生成枚举,而无需将项存储在集合中

public IEnumerable<int> ThousandSquares()
{
    for (int i = 1; i <= 1000; i++) {
        yield return i * i;
    }
}

public void PrintSquares()
{
    foreach (int n in ThousandSquares()) {
        Console.WriteLine(n);
    }
}
public IEnumerable千方百计()
{

对于(int i=1;i带有
收益返回期限项;
您只返回一个类型为
List
的项目。列表实现
IEnumerable
,或者换句话说,是一个
IEnumerable
。因此,返回类型必须是
IEnumerable
,而不是
IEnumerable
,这将适合于返回
DurationModels
列表的枚举

将方法更改为

public IEnumerable<DurationModel> GetDurationItems()
{
    yield return new DurationModel { Duration = "1 Day" };
    yield return new DurationModel { Duration = "1 Week" };
    yield return new DurationModel { Duration = "1 Month" };
}
您也可以使用
列表

请注意,
yield return
使该方法暂停,记住其状态并返回。当
foreach
请求下一项时,该方法在最后一次
yield return
后恢复(另请参见Lars Corneliussen)

第一种方法是在循环中使用时创建项,第二种方法是在循环开始时创建项

yield return
允许您通过算法生成枚举,而无需将项存储在集合中

public IEnumerable<int> ThousandSquares()
{
    for (int i = 1; i <= 1000; i++) {
        yield return i * i;
    }
}

public void PrintSquares()
{
    foreach (int n in ThousandSquares()) {
        Console.WriteLine(n);
    }
}
public IEnumerable千方百计()
{

对于(inti=1;i为什么要使用
收益回报期限项目;
而不是
回报期限项目;

您应该在构造函数中添加
\u durationModel=new durationModel().GetDurationItems();
,然后调用getData

为什么要使用
yield return durationItems;
而不是
return durationItems;

您应该在构造函数中添加
\u durationModel=new durationModel().GetDurationItems();
,然后调用getData

从现有集合中使用
收益返回的“常用习惯用法:
foreach(durationItems中的var项)收益返回项;
(即,对于每个项,分别收益)当然,在这种情况下,收益率返回通常是可以避免的..我不认为这是重复的,但看一看可能会有所帮助.tl;dr:-Your
GetDurationItems
返回一个包含单个项的
IEnumerable
,该项是一个包含三个
DurationModel
实例的列表使用现有集合中的
收益回报
的“常用习惯用法:
foreach(durationItems中的var项目)收益回报项目;
(即,对于每个项目,分别收益。)当然,在这种情况下,收益率返回通常是可以避免的。我不认为这是重复的,但看一看可能会有所帮助。tl;dr:-Your
GetDurationItems
返回一个包含单个项的
IEnumerable
,该项是一个包含三个
DurationModel
实例的列表。