private void WriteCreateCollection(TypeDesc td, string source)
{
bool useReflection = td.UseReflection;
string item = (td.ArrayElementTypeDesc == null ? "object" : td.ArrayElementTypeDesc.CSharpName) + "[]";
bool arrayElementUseReflection = td.ArrayElementTypeDesc == null ? false : td.ArrayElementTypeDesc.UseReflection;
//cannot call WriteArrayLocalDecl since 'ci' is always
//array and 'td' corresponds to 'c'
if (arrayElementUseReflection)
item = typeof(Array).FullName;
Writer.Write(item);
Writer.Write(" ");
Writer.Write("ci =");
Writer.Write("(" + item + ")");
Writer.Write(source);
Writer.WriteLine(";");
Writer.WriteLine("for (int i = 0; i < ci.Length; i++) {");
Writer.Indent++;
Writer.Write(RaCodeGen.GetStringForMethod("c", td.CSharpName, "Add", useReflection));
//cannot call GetStringForArrayMember since 'ci' is always
//array and 'td' corresponds to 'c'
if (!arrayElementUseReflection)
Writer.Write("ci[i]");
else
Writer.Write(RaCodeGen.GetReflectionVariable(typeof(Array).FullName, "0") + "[ci , i]");
if (useReflection) Writer.WriteLine("}");
Writer.WriteLine(");");
Writer.Indent--;
Writer.WriteLine("}");
}