我有一个字符串类型的 IEnumerable,具有默认值和修复顺序。我有一个 Module 类型的列表,其值以随机顺序排列。我想要一个模块类型的唯一对象列表。我用下面的代码得到的是:一个字符串类型的唯一对象列表。
有人知道这个技巧吗?
static void Main(string[] args) {
List<Module> moduleList = new List<Module>() {
new Module{ ModuleId = 1, ModuleType = "world"},
new Module{ ModuleId = 2, ModuleType = "wayne"},
new Module{ ModuleId = 3, ModuleType = "hallo"},
new Module{ ModuleId = 4, ModuleType = "tes"},
new Module{ ModuleId = 5, ModuleType = "mi"},
new Module{ ModuleId = 6, ModuleType = "haha"},
new Module{ ModuleId = 7, ModuleType = "pipi"},
new Module{ ModuleId = 8, ModuleType = "bla"},
};
// This result is fine that the list is unified and the predefined
// values order is not changed: bla, tes, mi
// BUT I need to return a query with Module objects
var query = GetDefaultValues().Union(moduleList.Select(t => t.ModuleType));
}
private static IEnumerable<string> GetDefaultValues() {
yield return "bla";
yield return "tes";
yield return "mi";
}
在每个 lambda 中执行一个 new Module() 并复制这些值对我来说不是选项。
更新:
期望的输出:
模块列表:
new Module{ ModuleId = 8, ModuleType = "bla"},
new Module{ ModuleId = 4, ModuleType = "tes"},
new Module{ ModuleId = 5, ModuleType = "mi"},
new Module{ ModuleId = 1, ModuleType = "world"},
new Module{ ModuleId = 2, ModuleType = "wayne"},
new Module{ ModuleId = 3, ModuleType = "hallo"},
new Module{ ModuleId = 6, ModuleType = "haha"},
new Module{ ModuleId = 7, ModuleType = "pipi"},