簡體   English   中英

C#飛鏢/顫振返回列表的收益率列表 <String> 循環中

[英]C# Yield Return on Dart / Flutter Return List<String> in Loop

我有以下方法:

List<DropdownMenuItem<String>> _buildGitIgnoreTemplateItems() {
    var _dropDownMenuItems = List<DropdownMenuItem<String>>();

    _gitIgnoreTemplateNames.forEach((templateName) {
        _dropDownMenuItems.add(DropdownMenuItem(
            child: Text(templateName),
            value: templateName,
        ));
    });

    return _dropDownMenuItems;
}

我想要實現的是刪除變量_dropDownMenuItems ,例如:

List<DropdownMenuItem<String>> _buildGitIgnoreTemplateItems() {
    _gitIgnoreTemplateNames.forEach((templateName) {
        **yield return** DropdownMenuItem(
            child: Text(templateName),
            value: templateName,
        );
    });
}

您可以看到其他語言的類似實現,例如: C#

C#太早了,但是看起來像同步生成器

Iterable<DropdownMenuItem<String>> _buildGitIgnoreTemplateItems() sync* {
    for(var templateName in _gitIgnoreTemplateNames) {
        yield DropdownMenuItem(
            child: Text(templateName),
            value: templateName,
        );
    }
}

但是也許你只是想要

_gitIgnoreTemplateNames.map((templateName) => 
    DropdownMenuItem(
      child Text(templateName), 
      value: templateName)
    ).toList()

dart中的等效項是StreamStreamController用於異步。 並且可Iterable進行同步。 您可以手動創建它們,也可以使用帶有async*sync*關鍵字的自定義功能

Iterable<String> foo() sync* {
  yield "Hello";
}


Stream<String> foo() async* {
  yield "Hello";
}

Dart具有更簡單的語法來實現您想要的:

List<DropdownMenuItem<String>> _buildGitIgnoreTemplateItems() {
  return _gitIgnoreTemplateNames
      .map((g) => DropdownMenuItem(
            child: Text(g),
            value: g,
          ))
      .toList();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM