【问题标题】:What's wrong with SelectMany? [duplicate]SelectMany 有什么问题? [复制]
【发布时间】:2019-04-11 10:02:42
【问题描述】:

我遇到了一个与 SelectMany 表达式有关的问题,我无法理解。

考虑一下:我有一个此类对象的集合

class Tag
{
    string DisplayText { get; set; }
    string Key { get; set; }
    int Value { get; set; }
}

现在我正在尝试获取所有显示文本(实际上是更复杂表达式的一部分):

var texts = AvailableTags.SelectMany(t => t.DisplayText);

现在为什么这会给我一个IEnumerable<char> 而不是IEnumerable<string>???我错过了什么吗?

【问题讨论】:

  • 它返回IEnumerable<char>,因为字符串是字符的集合
  • 看看:stackoverflow.com/questions/958949/…。特别是,在其中一个答案中搜索“list 'Fruits' contains 'apple'”

标签: c# linq


【解决方案1】:

如果AvailableTags 是一个列表(一个 IEnumerable),那么你应该简单地使用

var texts = AvailableTags.Select(t => t.DisplayText);

您使用SelectMany 得到的“奇怪”结果是由于(正如@derloopkat 所说)字符串是字符的集合这一事实。
所以你可以想象你的代码是这样的:

class Tag
{
    List<char> DisplayText { get; set; }
    string Key { get; set; }
    int Value { get; set; }
}

当您使用 SelectMany 时,您将获得每个 DisplayText 中包含的所有字符,然后结果被展平。

【讨论】:

    猜你喜欢
    • 2012-07-16
    • 2016-04-15
    • 2016-03-20
    • 2020-06-17
    • 1970-01-01
    • 2019-12-16
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多