我有一些遗留代码接收string[,]
作为方法参数之一。
但是,在我的方法中,我收到IDictionary<string, string>
,我必须转换为string[,]
才能继续。
我已经创建了这样的代码,
var names = attachments.Keys.ToArray();
var paths = attachments.Values.ToArray();
var multipleAttachments = new string[2,attachments.Count];
for(var i = 0; i < attachments.Count; i++)
{
multipleAttachments[0, i] = names[i];
multipleAttachments[1, i] = paths[i];
}
我对此并不满意,我正在寻找一些方法来使用LINQ表达式进行转换。这可能吗?
答案 0 :(得分:5)
LINQ在矩形阵列方面不是特别好。您可以轻松创建锯齿状数组:
// Note that this ends up "rotated" compared with the rectangular array
// in your question.
var array = attachments.Select(pair => new[] { pair.Key, pair.Value })
.ToArray();
...但矩形阵列没有等价物。如果 使用矩形数组,您可能需要考虑创建一个扩展方法来为您执行转换。如果你只想想要这个案例,你可能最好坚持你所拥有的......或者可能:
var multipleAttachments = new string[2, attachments.Count];
int index = 0;
foreach (var pair in multipleAttachments)
{
multipleAttachments[0, index] = pair.Key;
multipleAttachments[1, index] = pair.Value;
index++;
}
这将避免创建额外的数组,也不会依赖Keys
和Values
以相同的顺序提供其条目。
答案 1 :(得分:2)
var multipleAttachments = new string[2, attachments.Count];
int i = 0;
attachments.ToList().ForEach(p =>
{
multipleAttachments[0, i] = p.Key;
multipleAttachments[1, i] = p.Value;
i++;
});