Как перебрать коллекцию?
Я использую пробную версию компилятора Fujitsu/Alchemy и получаю медленную и плохую поддержку от поставщика.
В основном я хочу передать список из С# в COBOL, а затем позволить COBOL использовать его и, возможно, обновить.
В C# обычным способом перебора коллекции является использование конструкции foreach.
Однако конструкция C# foreach является сокращением для следующего:
private static void test1()
{
List<IDMSMapField> list1 = new List<IDMSMapField>();
int listSize = list1.Count;
// was just checking exact variablename and case here to copy into COBOL code.
int itemNumber = 0;
System.Collections.Generic.List<IDMSMapField>.Enumerator enumerator1 = list1.GetEnumerator();
while (enumerator1.MoveNext())
{
Console.Write("Okay" + enumerator1.Current);
}
}
Я могу написать это на COBOL, если вы поможете мне понять, как объявить этот класс:
System.Collections.Generic.List<IDMSMapField>.Enumerator
Структура "Перечислитель" задокументирована на сайте Microsoft MSDN.
В нем говорится, что "Перечислитель" - это структура, а не класс!
Из того, что я могу сказать в руководстве «Создание COBOL из DotnetFrameworkDox.pdf», структуры определяются как классы в COBOL REPOSITORY.
Пример из мануала:
Define specifiers for structure in REPOSITORY, and any struct members:
CLASS STRUCT-name AS "struct-namespace"
PROPERTY PROP-struct-member AS "external-property-name"
Handle structures like classes. E.g. object to store a struct instance:
01 struct-object OBJECT REFERENCE STRUCT-name.
Ниже я повторяю некоторые из вариантов, которые я пробовал, но все они не смогли скомпилироваться из-за ошибки «невозможно разрешить». Если вы можете показать мне, как правильно объявить это, я думаю, мы сможем двигаться дальше.
1.
REPOSITORY.
CLASS CLASS-LIST AS "System.Collections.Generic.List<>"
CLASS STRUCT-Enumerator AS "System.Collections.Generic.List<>.Enumerator"
.
Ошибка во второй строке:
ошибка JMN1795I-S: именованная ссылка «System.Collections.Generic.List‹>.Enumerator» не может быть разрешена.
Точно такая же ошибка для этого:
REPOSITORY. CLASS CLASS-LIST AS "System.Collections.Generic.List<>" CLASS STRUCT-Enumerator AS "System.Collections.Generic.List<T>.Enumerator" .
ошибка JMN1795I-S: именованная ссылка «System.Collections.Generic.List.Enumerator» не может быть разрешена.
Та же ошибка для этого:
РЕПОЗИТОРИЙ. CLASS CLASS-LIST AS "System.Collections.Generic.List‹>" CLASS STRUCT-Enumerator as "System.Collections.Generic.List.Enumerator" .
ошибка JMN1795I-S: именованная ссылка «System.Collections.Generic.List.Enumerator» не может быть разрешена.
Другая альтернатива - рассматривать его как массив, но я тоже застрял на этом.
REPOSITORY.
CLASS LIST-IDMSMapField AS "System.Collections.Generic.List<>[]"
CLASS CLASS-IDMSMapField AS "Lightyear.ERCB.IDMSDC.IDMSMapField"
CLASS CLASS-LIST-IDMSMapField EXPANDS LIST-IDMSMapField USING CLASS-IDMSMapField.
METHOD-ID. TW1DR4000-PF06 AS "TW1DR4000_PF06".
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MapFieldItem USAGE OBJECT REFERENCE CLASS-IDMSMapField.
LINKAGE SECTION.
01 MapFieldList USAGE OBJECT REFERENCE CLASS-LIST-IDMSMapField.
PROCEDURE DIVISION...
...
SET MapFieldItem TO MapFieldList(1).
ошибка JMN2671I-S: ':' должен быть указан в модификаторе ссылки. ':' предполагается.
Я думаю, что компилятор, возможно, рассматривает (1) как операцию подстроки.