C# Lambda转为IDictionary<;字符串,对象>;将值转换为对象[]
我试图创建一个Lambda表达式,它根据给定的命名输入从IDictionary创建一个对象数组 这就是我到目前为止所做的:C# Lambda转为IDictionary<;字符串,对象>;将值转换为对象[],c#,linq,lambda,C#,Linq,Lambda,我试图创建一个Lambda表达式,它根据给定的命名输入从IDictionary创建一个对象数组 这就是我到目前为止所做的: var dic = new Dictionary<string, object>() { {"some", "value"}, {"dateTime", DateTime.Now}, {"someNum", 52}, {"other", "val
var dic = new Dictionary<string, object>()
{
{"some", "value"},
{"dateTime", DateTime.Now},
{"someNum", 52},
{"other", "values"}
};
string[] inputArray = { "input", "dateTime", "someNume" };
var processedArray = inputArray.Select(i => dic.Where(d => d.Key == i).Select(kvp => kvp.Value)).ToArray();
var dic=newdictionary()
{
{“一些”,“价值”},
{“dateTime”,dateTime.Now},
{“someNum”,52},
{“其他”,“值”}
};
字符串[]inputArray={“input”、“dateTime”、“someNume”};
var processedArray=inputArray.Select(i=>dic.Where(d=>d.Key==i).Select(kvp=>kvp.Value)).ToArray();
这不起作用,它返回一个IEnumerable
,但所有成员的类型都是KeyValuePair
,似乎没有密钥数据
我认为这有一些问题。我认为我不应该使用dic.Select(),因为字典中的关键条目是唯一的,我显然引用了错误的值,或者缺少了转换每个结果的方法
我不知道如何使用单个Lambda实现这一点。我需要计算Lambda,因为我计划将它用作编译后的Lambda
有人能告诉我如何最好地做到这一点吗?我认为这应该可以做到
var processedArray =
(from key in inputArray
where dic.ContainsKey(key)
select dic[key]).ToArray();
或者使用fluent/dot语法:
var processedArray = inputArray
.Where(key => dic.ContainsKey(key))
.Select(key => dic[key])
.ToArray();
如果您希望在字典缺少键的情况下,processedArray
输出中仍有一个元素(例如,对于示例中的“输入”字符串),您可以这样做(对于字典中缺少的条目,使用null
):
我认为这应该能奏效
var processedArray =
(from key in inputArray
where dic.ContainsKey(key)
select dic[key]).ToArray();
或者使用fluent/dot语法:
var processedArray = inputArray
.Where(key => dic.ContainsKey(key))
.Select(key => dic[key])
.ToArray();
如果您希望在字典缺少键的情况下,processedArray
输出中仍有一个元素(例如,对于示例中的“输入”字符串),您可以这样做(对于字典中缺少的条目,使用null
):
您只需访问字典索引即可选择这些索引:
inputArray.Select(k => dic[k]);
您只需访问字典索引即可选择这些索引:
inputArray.Select(k => dic[k]);
这将为OPs样本输入抛出一个
KeyNotFoundException
。@Alex这是真的。我认为您的答案的行为可能更接近OP的预期。这将为OPs示例输入抛出一个KeyNotFoundException
。@Alex这是真的。我认为你的答案的行为可能更接近OP的预期。@chomba,对不起,我似乎在没有注意到你的建议的情况下,在我自己仍在努力改进你的建议时跳过了你建议的编辑。我注意到后把它合并了。请随意提出其他改进建议。感谢您的编辑,这对我正在尝试做的工作非常有帮助:)@chomba,对不起,我似乎在自己仍在尝试改进时跳过了您建议的编辑,而没有注意到您的建议。我注意到后把它合并了。请随意提出其他改进建议。感谢您的编辑,这对我正在尝试的工作非常有帮助:)