c# - 如何将两个不同类型的列表合并为一个包含两种类型的新类型列表?

标签 c# linq enums

我想合并/合并/加入/无论什么枚举列表,这样统一列表中的每个项目都会有两个字段——枚举的名称> 项目(string Name)及其值(TokensEnum Token):

var tokens = Enum.GetValues(typeof (TokensEnum));
var names = Enum.GetNames(typeof (TokensEnum));

var combined = InTheDarknessBindThem(tokens,names);

foreach(var c in combined)
    MessageBox.Show(string.Format(
        "Token \"{0}\" value is {1}", c.Name, (int)c.Token));

如何编写以下方法的主体(最好是 LINQ-wise)?

InTheDarknessBindThem(IEnumerable<TokensEnum> tokens, IEnumerable<string> names) {
    /*
        ...
    */
}

最佳答案

如果两个列表都按顺序排列,您可以使用 Zip 扩展方法:

tokens.Cast<TokensEnum>().Zip(names, (t, n) => Tuple.Create(t, n));

这将返回 IEnumerable<Tuple<TokensEnum, string>> .

但是作为Jon Skeet suggests ,在这种情况下,做这样的事情可能会更容易:

Enum.GetValues(typeof(TokensEnum))
    .Cast<TokensEnum>()
    .Select(t => Tuple.Create(t, t.ToString()));

这将返回与上面相同的结果,但它将在一个步骤中完成。

既然你在评论中提到你想要一个 Dictionary<string, TokensEnum> ,你可以使用这样的东西来构造它:

Dictionary<string, TokensEnum> myDictionary = 
    Enum.GetValues(typeof(TokensEnum))
        .Cast<TokensEnum>()
        .ToDictionary(t => t.ToString());

关于c# - 如何将两个不同类型的列表合并为一个包含两种类型的新类型列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20616527/

相关文章:

c# - 从 USB 打印机获取信息

c# - 将对象转换为 System Guid

sql - Linq 看不到属性

c# - 使用 Linq 生成要从另一个集合中删除的事物的集合

java - 如何替换长链的if

c# - 使用 float + Lambda 表达式 C#

c# - 在 SSH.NET 中进行多因素身份验证( key 和密码)时获取 'Permission denied (password).'

c# 将 LINQ var 结果转换为实际类型

objective-c - 检查变量是否属于枚举值

swift - 我如何在 Swift 4 中测试具有关联值的枚举案例的等效性