Как динамически создать объект [] [] из Hashtable? - PullRequest
0 голосов
/ 27 сентября 2018

Я пишу обертку вокруг веб-сервисов третьей стороной.Интерфейс выглядит следующим образом:

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)
{
    ...
}

1 Ответ

0 голосов
/ 27 сентября 2018

Если я вас правильно понял, вы можете попробовать 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...