次のようなことができます。
var splits = input.Select(v => v.Split('@'));
var features = splits.Select(s => s[0]).ToList();
var projects = splits.Select(s => s[1]).ToList();
コードを少し増やしてもパフォーマンスが向上し、ガベージ コレクターへの負担が軽減される場合は、次のようにします。
var features = new List<string>();
var projects = new List<string>();
foreach (var split in input.Select(v => v.Split('@')))
{
features.Add(split[0]);
projects.Add(split[1]);
}
しかし、全体として、クラスを作成して入力を解析することをお勧めします (より C# スタイルのアプローチ):
public class ProjectFeature
{
public readonly string Project;
public readonly string Feature;
public ProjectFeature(string project, string feature)
{
this.Project = project;
this.Feature = feature;
}
public static IEnumerable<ProjectFeature> ParseList(IEnumerable<string> input)
{
return input.Select(v =>
{
var split = v.Split('@');
return new ProjectFeature(split[1], split[0]);
}
}
}
後で使用します (可能な使用方法の例にすぎません):
var projectFeatures = ProjectFeature.ParseList(File.ReadAllLines(@"c:\features.txt")).ToList();
var features = projectFeatures.Select(f => f.Feature).ToList();
var projects = projectFeatures.Select(f => f.Project).ToList();
// ??? etc.