我想我很好奇什么更好? 将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会缓存它所看到的东西所以它, 所以我很好奇,对于大型数据源来说最糟糕的是什么...大量的投射还是大量使用动态? (或)我有点疯狂...... :)
答案 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
}