Средний путь между XSD все и последовательностью XSD

Компилятор не может определить тип, потому что вы передаете null в качестве второго параметра.

performSelectorAfterDelay(new Action(funcA), null, kSecondsWaitAfterTransferToFollowersPage);

В любом случае, после того как вы решите эту проблему, у вас будет другая ошибка, потому что funcB принимает int, поэтому его нельзя передать в new Action, потому что Action требует метода без параметров.

Возможно, вы сможете заставить его работать, используя Action<object> согласно другому ответу, но это будет означать, что вы не можете оставить funcA без параметра. Однако, это решение кажется излишним, если я что-то не так понимаю. Вы можете просто передать фактическое действие, которое вызывает funcA / funcB со своими параметрами, например:

public void performSelectorAfterDelay(Action method, double delay)
{
    Thread thread = new Thread(delegate ()
    {
        Thread.Sleep(TimeSpan.FromSeconds(delay));
        method();
    });
    thread.Start();
}

public void test()
{
    performSelectorAfterDelay(() => funcA(), kSecondsWaitAfterTransferToFollowersPage);
    performSelectorAfterDelay(() => funcB(1), kSecondsWaitAfterTransferToFollowersPage);
}
25
задан Jeremy Stein 24 February 2014 в 18:35
поделиться

5 ответов

Ваш код должен быть действителен в XSD 1.1. Для XSD 1.0 необходимо найти обходной путь.

3
ответ дан 28 November 2019 в 20:45
поделиться

Не могли бы вы просто превратить вашу вещь "национальность" в ее собственный complexType, а затем использовать этот новый сложный тип внутри вашего xs : all?

<xs:complexType name="NationalityType">
  <xs:sequence>   
    <xs:element name="nationality" minOccurs="1" maxOccurs="unbounded" />
  </xs:sequence>
</xs:complexType>

<xs:all>
  <xs:element name="name" blabla />
  <xs:element name="email" blabla />
  <xs:element name="nationalities" type="NationalityType" />
</xs:all>

У меня нет ничего под рукой, чтобы проверить это, так что это действительно просто не в моей голове ..... попробуй!

РЕДАКТИРОВАТЬ: проверил это сейчас - это работает, единственная незначительная цена, которую нужно заплатить, это то, что ваш XML должен выглядеть примерно так:

<....>
  <email>......</email>
  <nationalities>
    <nationality>ABC</nationality>
    <nationality>CDE</nationality>
  </nationalities>
  <name>.....</name>
</.....>

Таким образом, вы получаете дополнительный узел, который будет содержать произвольный длинный список <национальность> элементов.

Марк

21
ответ дан 28 November 2019 в 20:45
поделиться

хз: выбор не сработает? Если нет, просто оберните это в последовательности или наоборот.

0
ответ дан 28 November 2019 в 20:45
поделиться

Или, поскольку «USER» будет иметь несколько дочерних элементов, почему бы не установить его как сложный тип? Нечто подобное должно работать.

<xs:complexType>
  <xs:sequence>
    <xs:element name="Name" type="xs:string" />
    <xs:element name="Password" type="xs:string" />
    <xs:element minOccurs="1" maxOccurs="unbounded" name="Nationality" type="xs:string" />
  </xs:sequence>
</xs:complexType>
0
ответ дан 28 November 2019 в 20:45
поделиться

Я думаю, что то, что вы ищете, противоречит цели XML. Было бы странно иметь действительный фрагмент XML, подобный этому:

<user>
  <nationality/>
  <name/>
  <nationality/>
  <email/>
  <nationality/>
</user>

Похоже, вы просите что-то вроде того, что предложил marc_s:

<user>
  <name/>
  <email/>
  <nationality/>
  <nationality/>
  <nationality/>
<user>

, в который нужно вставить:

<user>
  <name/>
  <email/>
  <nationalities>
     <nationality/>
     <nationality/>
     <nationality/>
  </nationalities>
<user>
7
ответ дан 28 November 2019 в 20:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: