ExpandoObject的性能不佳

时间:2014-04-28 13:51:25

标签: c# performance expandoobject

我有一个可怕的问题,一个ExpandoObject列表用Incoming Products读取他们的数据,我不能使用正常的类因为我使用产品列表,有些产品使用大小作为数字(20,21,22 .. 。),另外作为字母(S,M,L,XL ....)我把它放在网格上,在每个尺寸列中我放一个每个商店从供应商处收到的数量

这是我的清单:

listaGrade = new List<dynamic>();

foreach(product p in BD.Proc)
{
    foreach(store s in BD.Stores)
    {
        dynamic itemGradeDinamic = new ExpandoObject();

        itemGradeDinamic.MODELDES = p.MODELDES;
        itemGradeDinamic.TIPO = p.TIPO;
        itemGradeDinamic.DESCRIPTION = p.DESCRIPTION;
        itemGradeDinamic.STORE = s.CODE;
        itemGradeDinamic.STOREDES = s.NAME;
        itemGradeDinamic.SUBTOTAL = 0;

        foreach (string size in p.sizes)
        {
            ((IDictionary<String, Object>)itemGradeDinamic).Add(size, 0);
        }
        listaGrade.add(itemGradeDinamic);
    }
}

获取数据:

object description, modelDes = "";
object qtde, store = 0;
foreach (ExpandoObject obj in listaGrade)
{
   foreach (string size in "products".sizes)
   {
        if (((IDictionary<string, object>)obj).TryGetValue(size, out qtde))
        {
            if (Convert.ToDecimal(qtde) > 0)
            {
                 ((IDictionary<string, object>)obj).TryGetValue("DESCRIPTION", out description);
                 ((IDictionary<string, object>)obj).TryGetValue("MODELDES", out modelDes);
                 ((IDictionary<string, object>)obj).TryGetValue("TIPO", out tipo);
                            ((IDictionary<string, object>)obj).TryGetValue("SHOP", out store);

             }
         }
     }
}    

1 个答案:

答案 0 :(得分:0)

ExpandoObject不替换静态类型。在这种特殊情况下,您必须放弃ExpandoObject以支持自定义静态类。如果您需要包含动态数据结构的内容,请使用词典或词典。取决于任务...