IDictionary <string,string =“”>通过LINQ </string,>进入字符串[,]

时间:2012-04-02 12:57:33

标签: c# .net linq

我有一些遗留代码接收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表达式进行转换。这可能吗?

2 个答案:

答案 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++;
}

这将避免创建额外的数组,也不会依赖KeysValues以相同的顺序提供其条目。

答案 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++;
                });