在数据绑定期间,Cast和对象或使用动态是否更好?

时间:2011-08-17 20:43:01

标签: asp.net c#-4.0 dynamic casting

我想我很好奇什么更好? 将DataItem转换为我知道的类型... 要么 将对象传递给期望动态的函数,让DLR发挥其魔力。

  <asp:Repeater ID="rptItems" runat="server">
    <ItemTemplate>
      <div>
        <%# FormatBlogLink(Container.DataItem) %>
        OR
        <%# FormatBlogLink((BlogPost)Container.DataItem) %>
      </div>
    </ItemTemplate>
  </asp:Repeater>

代码

protected string FormatBlogLink(dynamic blogPost)
{
/// Do a bunch of stuff 
}

VS

protected string FormatBlogLink(BlogPost blogPost)
{
/// Do a bunch of stuff 
}

我的例子很简单, 我以为我读过DLR会缓存它所看到的东西所以它, 所以我很好奇,对于大型数据源来说最糟糕的是什么...大量的投射还是大量使用动态? (或)我有点疯狂...... :)

2 个答案:

答案 0 :(得分:0)

我的个人意见是投射到合适的类型,如果这是你期望使用的。在dynamic中使用FormatBlogLink的唯一原因是,如果您希望传递恰好碰巧共享相同属性名称和方法的不同对象,等等。否则,转换为适当的类型并从intellisense中受益。

答案 1 :(得分:0)

我也会选择演员阵容 - 但你可以在你的FromatBlockLink方法中做到这一点(让它拍摄对象)。这样做的好处是可以从视图中删除这个(小)逻辑,当然你可以检查函数中的类型。

protected string FormatBlogLink(object blogPost)
{
   var post = blogPost as BlogPost;
   if (post == null) 
   {
      // throw or use show error-message
   }
   /// Do a bunch of stuff 
}