关于C#:selectmany有什么问题?

What's wrong with SelectMany?

本问题已经有最佳答案,请猛点这里访问。

我遇到了一个selectmany表达式的问题,我就是无法将我的头绕起来。

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

1
2
3
4
5
6
class Tag
{
    string DisplayText { get; set; }
    string Key { get; set; }
    int Value { get; set; }
}

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

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

为什么这会让我返回一个IEnumerable,而不是一个IEnumerable????我错过什么了吗?


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

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

您使用SelectMany所得到的"奇怪"结果(正如@derloopkat所说)是因为字符串是char的集合。所以你可以想象你的代码是这样的:

1
2
3
4
5
6
class Tag
{
    List<char> DisplayText { get; set; }
    string Key { get; set; }
    int Value { get; set; }
}

当你使用SelectMany时,你得到了每个DisplayText中包含的所有字符,然后结果就变平了。