代码之家  ›  专栏  ›  技术社区  ›  Shantanu Gupta

如何将匿名类型强制转换为指定的强制转换以获取其所有属性

  •  2
  • Shantanu Gupta  · 技术社区  · 14 年前

    _ucItem.lblItemName.Text = itemRow.Field<string>("ITEM_NAME").ToString();
    _ucItem.pbxItemImg.Image = itemRow.Field<string>("IMAGE").ToString();
    _ucItem.lblItemName.Text = itemRow.Field<string>("FK_ITEM_ID").ToString();
    

    我是否必须声明一个类来完成这项工作,或者是否有某种方法可以在不定义类结构的情况下完成相同的工作

    private void SomeFunction()
    {
       var distinctItems = itemListToCreate
                .Select(dr => new { FK_ITEM_ID = dr.Field<long>("FK_ITEM_ID") }).Distinct()
                .Join(_SelectProgram.FilteredItemDescription, outer => outer.FK_ITEM_ID,
                inner => inner.Field<long>("FK_ITEM_ID"),
                (inner, outer) => new 
                                  { 
                                      inner.FK_ITEM_ID,
                                      ItemName = outer.Field<string>("ITEM_NAME"),
                                      ItemImage = outer.Field<byte[]>("IMAGE") 
                                  }
                );
    
        CreateItemsDynamically(distinctItems.ToList());
    }
    
    private void CreateItemsDynamically<T>(List<T> itemListToCreate)
    {
        itemListToCreate.ForEach(itemRow =>
        {                
            ucItem _ucItem = new ucItem();
            //Compute location for this usercontrol              
    
            _ucItem.lblItemName.Text = itemRow.Field<string>("ITEM_NAME").ToString();
            _ucItem.pbxItemImg.Image = itemRow.Field<string>("IMAGE").ToString();
            _ucItem.lblItemName.Text = itemRow.Field<string>("FK_ITEM_ID").ToString();
    
            _ucItem.TodayButton_OnClick += new EventHandler(_ucItem_TodayButton_OnClick);
            _ucItem.MultiDateButton_OnClick += new EventHandler(_ucItem_MultiDateButton_OnClick);
    
            pnlItemCollection.Controls.Add(_ucItem);
            _SelectProgram.ItemCollectionList.Add(_ucItem);
        });
    }
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Preet Sangha    14 年前

    类型可以是显式命名的,也可以是匿名的。如果更早,则声明类型-结构或类。

        2
  •  2
  •   Jon Skeet    14 年前

    我不太清楚你想做什么。在那里 在方法之间使用匿名类型的方法,但它们有点黑客。我 blogged about one way a while ago 能够

        3
  •  0
  •   Aliostad    14 年前

    他们是匿名的,这就是重点!您可以使用反射查看类型,但如果需要访问它,只需创建一个类型-这有多困难?