我想合并/合并/加入/无论什么枚举
列表,这样统一列表中的每个项目都会有两个字段——枚举
的名称> 项目(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/