【问题标题】:How do I insert a List of value into an Enumerable?如何将值列表插入到 Enumerable 中?
【发布时间】:2019-05-01 19:27:13
【问题描述】:

我必须查看我的 IEnumerable 中的第一个元素是否等于某个值,如果是,我必须将其更新为新列表

我正在尝试使用类似的东西

if (sequence.First().Equals(value))
        {

            return newValues.Prepend(sequence.Skip(1));

        }

因为我必须是最通用的,但是当我尝试测试这个调用时它只返回 null

【问题讨论】:

  • IEnumerable 不允许修改。
  • 使用 newValues.Concat(sequence.Skip(1)) 之类的东西(ConcatSkip 都是 Linq 扩展方法;如果有不清楚的地方,文档唾手可得)
  • 我可以改写吗?你想根据一个值测试一个序列,如果序列中的第一个项目是匹配的,你想将序列的 rest 附加到 separate 列表 -否则......不是吗?
  • 是的,如果条件为真,我需要将新列表附加到旧列表中
  • @MattiaCaruso,您的问题说明您想将旧列表附加到新列表中。但是,现在您说要将新列表附加到旧列表。现在是哪一个?不能两者兼有……

标签: c# ienumerable enumerable


【解决方案1】:

您不能修改IEnumerable。但你可以使用这种方法:

// your sample:
IEnumerable<int> sequence = new[] {2, 5, 1};
int value = 2;
IEnumerable<int> newValues = new[] {1, 2, 3};

if (sequence.First() == value)
    return newValues.Concat(sequence.Skip(1)).ToList()
else
    return sequence.ToList();

【讨论】:

  • @elgonzo:不需要。但由于源是一个数组,我认为结果应该是相同的类型。否则,您将在每次使用它时生成此序列。
  • 我正在尝试这个:collection = newValues.Concat((sequence.Skip(1).ToList())) as List;因为我的函数返回一个 List 但测试一直失败(我创建了一个包含我希望返回的值的列表并使用返回值检查它们)
  • @MattiaCaruso:如果您需要列表,请使用ToList,如下所示:newValues.Concat(sequence.Skip(1)).ToList()。显示在我的答案中
猜你喜欢
  • 1970-01-01
  • 2014-04-29
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 2019-11-21
相关资源
最近更新 更多