Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Lambda转为IDictionary<;字符串,对象>;将值转换为对象[]_C#_Linq_Lambda - Fatal编程技术网

C# 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

我试图创建一个Lambda表达式,它根据给定的命名输入从IDictionary创建一个对象数组

这就是我到目前为止所做的:

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,对不起,我似乎在自己仍在尝试改进时跳过了您建议的编辑,而没有注意到您的建议。我注意到后把它合并了。请随意提出其他改进建议。感谢您的编辑,这对我正在尝试的工作非常有帮助:)