как использовать if else в назначении xquery

Я пытаюсь использовать условие if для присвоения значения переменной в xquery. Я не знаю, как это сделать.

Вот что я пробовал:

declare namespace libx='http://libx.org/xml/libx2';
declare namespace atom='http://www.w3.org/2005/Atom';
declare variable $entry_type as xs:string external;
let $libx_node :=
    if ($entry_type = 'package' or 'libapp') then
      {element {fn:concat("libx:", $entry_type)} {()} }
    else if ($entry_type = 'module') then
      '
        {$module_body}
      '

Этот код выдает ошибку [XPST0003] Incomplete 'if' expression. Может ли кто-нибудь помочь мне исправить это?

Кроме того, может ли кто-нибудь предложить несколько хороших руководств по изучению xqueries.

Спасибо, Я не считаю, что этот вопрос остается в Интернете. Допустим, я ...

Возможный дубликат:
Блокировки повторного входа в C #

Я посмотрел здесь, на StackOverflow и на MSDN , и не могу поверить, что не смог найти этот вопрос в Интернете.

Допустим, у меня есть класс с частным член, к которому я хочу получить доступ в нескольких общедоступных методах. Эти общедоступные методы будут вызываться разными потоками, следовательно, потребуется синхронизация.

public class MyClass
{
    private Object SomeSharedData = new Object();

    public void MethodA()
    {
        lock( SomeSharedData) {
            // do something
            MethodB();
        }
    }

    public void MethodB()
    {
        lock( SomeSharedData) {
            // do something
        }
    }
}

Обратите внимание, что MethodA и MethodB могут вызываться пользователями этого класса, но MethodA также вызывает MethodB, что приводит к вложенному условию блокировки.

Это гарантированно безопасно? Другими словами, делает. NET обрабатывает это путем подсчета ссылок на блокировку, так что, когда я выхожу из этих методов, блокировка уменьшается? Или .NET выполняет некую магию за кулисами, просто игнорируя все последующие блокировки объекта, происходящие из того же потока?

16
задан Community 23 May 2017 в 11:47
поделиться