使用给定枚举的所有元素进行枚举,并在LINQ中插入其他元素

sbi*_*sbi 4 c# linq

我有一个函数,我想从中创建另一个函数f(),以便对于原始枚举中的每个字符串,新的字符串具有和.元素的顺序很重要.IEnumerable<string>IEnumerable<string>ssf(s)

例:

IEnumerable<string> given  = { "A",         "B",         "C"         };
IEnumerable<string> wanted = { "A", f("A"), "B", f("B"), "C", f("C") };
Run Code Online (Sandbox Code Playgroud)

有没有办法使用LINQ 优雅地做到这一点?(如果没有,那么最优雅的方法是什么?)

Ani*_*Ani 8

var wanted = given.SelectMany(s => new[] {s, f(s)} );
Run Code Online (Sandbox Code Playgroud)

Enumerable.SelectMany将序列的每个元素投影到另一个序列,然后将得到的序列序列展平为单个序列.

在查询语法中:

var wanted = from s in given
             from item in new[] {s, f(s)}
             select item;
Run Code Online (Sandbox Code Playgroud)

另一种选择(如果订购不重要):

var wanted = given.Concat(given.Select(f)); // C# 4
var wanted = given.Concat(given.Select(s => f(s)));  // C# 3
Run Code Online (Sandbox Code Playgroud)