如何从Hashtable动态创建object [] []?

时间:2018-09-27 08:33:33

标签: c# arrays dictionary

我正在由第三方编写有关Web服务的包装。界面如下:

public System.Data.DataSet GetXxxx(string functionName, object[][] parameters)

functionName中的某些不使用任何参数,其中一些使用一个,其中一些更多,例如(来自其文档):

parameters[0][0]: @key_one
parameters[0][1]: value for @key_one
parameters[1][0]: @key_two
parameters[1][1]: value for @key_two

为概括包装器,我正在考虑传递HashtableDictionary<string, object>,并在包装​​器内部动态创建parameters[][]

我该怎么做?

更新:实际上,参数对必须保持顺序。要做,我必须将界面更改为:

using ListOfParamPairs = List<KeyValuePair<string, object>>;

...

public static DataSet GetXxxx(string functionName, ListOfParamPairs parameters)
{
    ...
}

1 个答案:

答案 0 :(得分:3)

如果我理解正确,则可以尝试 Linq

object[][]Dictinary<string, object>

 using System.Linq;

 ...

 Dictionary<string, object> dictionary = parameters
 //.Where(line => line.Length == 2 && line[0] != null) // valid params only
   .ToDictionary(line => line[0].ToString(), 
                 line => line[1]);

返回object[][]

 using System.Linq;

 ...

 object[][] parameters = dictionary
   .Select(pair => new object[] {pair.Key, pair.Value})
   .ToArray();

编辑::如果我们不得不切换到List<KeyValuePair<String, Object>>(我们想保留初始顺序;字典对不正确):

收件人:

 List<<KeyValuePair<String, Object>> list = parameters
   //.Where(line => line.Length == 2 && line[0] != null) // valid params only  
   .Select(line => new KeyValuePair(line[0].ToString(), line[1]))
   .ToList();

后退:(技术上相同)

  object[][] parameters = list
    .Select(pair => new object[] {pair.Key, pair.Value})
    .ToArray();