.NET XsltArgumentList - любой способ подсчитать / перечислить параметры? - PullRequest
2 голосов
/ 09 февраля 2011

XsltArgumentList не имеет метода count ().Есть ли способ получить это?

Кроме того, он не поддерживает конструкцию foreach для перечисления.

Кроме того, как использовать отладчик xslt в Visual Studio 2010 Xslt?

Ответы [ 2 ]

3 голосов
/ 09 февраля 2011

Вы можете использовать отражение, чтобы попасть в приватное поле parameters, в котором хранятся эти данные.Это означает, что вы берете зависимость от недокументированных деталей реализации, так что это может сломаться в любое время.

Если это только для целей отладки, я думаю, что все в порядке.Следует отметить, что он доступен вам через окно просмотра и набрав ?xslArg.parameters в ближайшем окне.

XsltArgumentList xslArg = new XsltArgumentList();

string name = "John";
xslArg.AddParam("name", "", name);

DateTime d = DateTime.Now;
xslArg.AddParam("date", "", d.ToString());

FieldInfo fi = xslArg.GetType().GetField("parameters", BindingFlags.NonPublic | 
                                                       BindingFlags.Instance);

System.Collections.Hashtable parameters = fi.GetValue(xslArg) as System.Collections.Hashtable;

if (parameters != null)
{
    foreach (System.Collections.DictionaryEntry item in parameters)
        Console.WriteLine("{0} | {1}", item.Key, item.Value);
}

Другой альтернативой является создание класса-оболочки.Этот класс будет содержать методы Add и Remove и предоставляет коллекцию параметров и XsltArgumentList и отвечает за синхронизацию этих двух параметров.

0 голосов
/ 09 февраля 2011

Что именно вы пытаетесь сделать? Можем ли мы получить больше информации? Обычно вы знаете параметры, которые нужно передать в XSLT и сгенерировать список аргументов оттуда. Обычно вы не получаете список аргументов, который вам нужно перебрать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...