gpt4 book ai didi

linq - 使用 LINQ To 对象创建键/值集合

转载 作者:行者123 更新时间:2023-12-01 09:39:52 25 4
gpt4 key购买 nike

我正在尝试使用 LINQ To Objects 创建一个查询,该查询将为我提供文件,按文件名索引,其二进制数据的值映射为 byte[] .

但是我找不到一种“简洁”的方法来做到这一点。我希望得到类似 Dictionary<T,K> 的东西输出。

这是我目前所拥有的。示例 delimFileNames="1.jpg|2.jpg"

//Extract filenames from filename string
//and read file binary from file
//select result into a filename indexed collection
var result = from f in delimFileNames.Split(Constants.DDS_FILENAME_SEPARATOR)
let filePath = Path.Combine(ddsClient.WorkingDirectory, f)
let fileData = File.ReadAllBytes(filePath)
select new KeyValuePair<string, byte[]>(f, fileData);

return result.ToDictionary(kvp => kvp.Key, kvp=> kvp.Value);

主要的问题是为什么我不能使用无参数的 ToDictionary() 或直接转换。任何改进上述内容的建议或替代方法都值得赞赏。

最佳答案

ToDictionary() 必须有一个 KeyValuePair 的特殊情况 - 当然,您可以将其添加为自己的扩展方法:

public static Dictionary<TKey, TValue> ToDictionary<TKey, TValue>(
IEnumerable<KeyValuePair<TKey, TValue>> source)
{
return source.ToDictionary(kvp => kvp.Key, kvp=> kvp.Value);
}

如果没有那个扩展方法,你可以这样做:

var result = from f in delimFileNames.Split(Constants.DDS_FILENAME_SEPARATOR)
.ToDictionary(f => f,
// Outdented to avoid scrolling
f => File.ReadAllBytes(Path.Combine(ddsClient.WorkingDirectory, f));

基本上,查询表达式允许您执行所有时髦的“让”操作,但会强制您在末尾有一个 select,这会使您传播两个不同的值(键和byte 数组)分成两个属性。

关于linq - 使用 LINQ To 对象创建键/值集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1405425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com