C# ExpandoObject的性能不佳

C# ExpandoObject的性能不佳,c#,performance,expandoobject,C#,Performance,Expandoobject,我在ExpandoObject列表中遇到了一个可怕的问题,我无法使用普通类,因为我使用的是产品列表,一些产品使用大小作为数字(20,21,22…),其他作为字母(S,M,L,XL…)我将其放在网格上,在每一个尺寸栏中,我列出了每个商店从供应商处收到的数量 这是我的清单: listaGrade = new List<dynamic>(); foreach(product p in BD.Proc) { foreach(store s in BD.Stores) {

我在ExpandoObject列表中遇到了一个可怕的问题,我无法使用普通类,因为我使用的是产品列表,一些产品使用大小作为数字(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);
    }
}
listaGrade=newlist();
foreach(BD.Proc中的产品p)
{
foreach(BD.Stores中的存储)
{
dynamic itemGradeDinamic=新的ExpandooObject();
itemGradeDinamic.MODELDES=p.MODELDES;
itemGradeDinamic.TIPO=p.TIPO;
itemGradeDinamic.DESCRIPTION=p.DESCRIPTION;
itemGradeDinamic.STORE=s.CODE;
itemGradeDinamic.STOREDES=s.NAME;
itemGradeDinamic.SUBTOTAL=0;
foreach(字符串大小以p.sizes为单位)
{
((IDictionary)itemGradeDinamic).添加(大小,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);

             }
         }
     }
}    
对象描述,modelDes=“”;
对象qtde,存储=0;
foreach(listaGrade中的ExpandooObject对象)
{
foreach(字符串大小以“产品”为单位)。大小
{
if(((IDictionary)obj).TryGetValue(大小,输出qtde))
{
如果(转换为特定值(qtde)>0)
{
((IDictionary)obj).TryGetValue(“描述”,out DESCRIPTION);
((IDictionary)obj).TryGetValue(“MODELDES”,out MODELDES);
(i词典)obj.TryGetValue(“TIPO”,out TIPO);
(i词典)obj.TryGetValue(“商店”,店外);
}
}
}
}    

ExpandoObject类不会替换静态类型


在这种特殊情况下,您必须放弃
expandooobject
,而使用自定义静态类。如果需要包含动态数据结构的内容,请根据任务使用
字典
字典

这里的技巧是不要使用ExpandoObject。它不是一种通用类型,你可以用它来做任何事情。它适用于代码中只有动态对象选项的部分。为什么不能简单地将大小存储为字符串?这将很容易处理大小20、21等。“我不能使用普通类,因为我使用的是产品列表,而有些产品使用大小作为数字(20、21、22…),其他作为字母(S、M、L、XL…)——为什么不使用
对象
字符串
来处理这两种情况?使用
ExpandoObject
会降低性能。选择不当会导致性能下降。正如其他人之前所写的,清理对象层次结构。我使用WPF网格项资源上的ExpandooObject,有时expando对象列表可以轻松超过50个对象。。。我是C#新手,在定义更好的方法时遇到了一些问题。静态类不是静态类型的对象。我是C#新手,不知道有多少命令,不知道如何识别更好的代码,如何使用,也不知道如何多次,这就是我在WPF中使用的方法。你能告诉我更好的方法吗?