Collection of objects
axapta, collections, dynamics-ax-2012, x++
Solution
Last things first, `anytype` variables takes the type first assigned to it, you cannot change it later:
static void Job2(Args _args)
{
anytype iVar;
iVar = 1; //Works, iVar is now an int!
iVar = "abc"; //Does not work, as iVar is now bound to int, assigns 0
info(iVar);
}
Back to your first question, `new List(Types::AnyType)` will never work as the `addEnd` method tests the type of its argument at runtime, and `anytype` variables will have the type of the value assigned to it.
Also `new List(Types::Object)` will only store objects, not simple data types as `int` and `str`. It may be contrary to your what you (and C#) believe, but simple types are not objects.
What is left? Containers:
static void TestList(Args _args)
{
List collection = new List(Types::Container);
ListIterator iter;
int iVar;
str sVar;
Object oVar;
container c;
;
iVar = 1;
sVar = "abc";
oVar = new Object();
collection.addEnd([iVar]);
collection.addEnd([sVar]);
collection.addEnd([oVar.toString()]);
iter = new ListIterator(collection);
while (iter.more())
{
c = iter.value();
info(conPeek(c,1));
iter.next();
}
}
Objects do not automatically convert to containers, usually you supply `pack` and `unpack` methods (implementing the interface `SysPackable`). In the above code `toString` is used which is cheating.
On the other hand, I do not see a use case for your request, that Lists should contain any type. It is against its designed purpose, a List contain one and only one type as defined when the List object is created.
Besides lists there are other collections types, maybe a Struct will suit your needs.
Problem
I want to store list of objects in X++. I've read in msdn that arrays and containers cannot store Objects, so the only option is to make a list of Collection. I have written the following code and tried to use `Collection = new List(Types::AnyType);` and `Collection = new List(Types::Classes);` but both are not working. Please see if I'm making some mistake in the following job. ``` static void TestList(Args _args) { List Collection; ListIterator iter; anytype iVar, sVar, oVar; PlmSizeRange PlmSizeRange; ; Collection = new List(Types::AnyType); iVar = 1; sVar = "abc"; oVar = PlmSizeRange; Collection.addEnd(iVar); Collection.addEnd(sVar); Collection.addEnd(oVar); iter = new ListIterator(Collection); while (iter.more()) { info(any2str(iter.value())); iter.next(); } } ``` Moreover, can't we cast some variable or object into Anytype variable, I read out that typecasting is done automatically this way; ``` anytype iVar; iVar = 1; ``` But on running it throws an error that expected type was Anytype, but encountered type is int.