我正在由第三方编写有关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
为概括包装器,我正在考虑传递Hashtable
或Dictionary<string, object>
,并在包装器内部动态创建parameters[][]
。
我该怎么做?
更新:实际上,参数对必须保持顺序。要做,我必须将界面更改为:
using ListOfParamPairs = List<KeyValuePair<string, object>>;
...
public static DataSet GetXxxx(string functionName, ListOfParamPairs parameters)
{
...
}
答案 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();