Как перебрать коллекцию?
Я использую пробную версию компилятора Fujitsu / Alchemy и получаю медленную и слабую поддержку от поставщика.
Я в основном хочупередать List из C # в 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
Структура "Enumerator" задокументирована на сайте MSDN Microsoft .
Это говорит о том, что "Enumerator" является структурой, а не классом!
Из того, что яВ руководстве «Создание COBOLfromDotnetFrameworkDox.pdf» можно указать, что структуры определены как классы в хранилище COBOL.
Пример из руководства:
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 как "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) как операцию подстроки.