gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:29:57 26 4
gpt4 key购买 nike

下面是一个示例代码。即使其中包含三个项目,我的循环也只循环一次。 items[0].Duration 仅返回添加的顶部项目。它不会遍历集合。

有什么想法吗?

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);
}
}
}

最佳答案

yield return durationItems;您只退回一件类型为 List<DurationModel> 的商品.该列表实现了 IEnumerable<DurationModel>或者,换句话说,是一个 IEnumerable<DurationModel> .因此,返回类型必须是 IEnumerable<DurationModel>而不是 IEnumerable<List<DurationModel>> ,这将适合返回 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 返回一个项目.或者,你可以写

public IEnumerable<DurationModel> GetDurationItems()
{
// This works because arrays implement IEnumerable<T>.
return new DurationModel[] {
new DurationModel { Duration = "1 Day" },
new DurationModel { Duration = "1 Week" },
new DurationModel { Duration = "1 Month" }
};
}

你可以使用 List<DurationModel>

请注意 yield return使方法暂停,记住它的状态并返回。当foreach请求下一个项目,该方法在最后一个 yield return 之后恢复. (另请参阅 Lars Corneliussen 的 Behind the scenes of the C# yield keyword)

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

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);
}
}

关于c# - 为什么我的 foreach 循环只循环一次,即使有 3 个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48291157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com