C#泛型,我做错了什么?

7

我是一个对泛型不太熟悉的人,我搞不明白为什么下面的代码不起作用。

我有一个扩展名叫做Grid的,它看起来像这样:

  public static class IEnumberableGridExtension
  {
        public static HelperResult Grid<T>(this IEnumerable<T> gridItems, Action<GridView<T>> thegrid) 
        {
            ........
        }

   }

假设我在Razor Model中有一个变量名为“Products”,它是类型为List<Product>的列表,那么我尝试这样做:

@Model.Products.Grid<Product>(grid=>{
...
});

这里的错误提示是“无法将方法组 'Grid' 转换为非委托类型 'object'。您打算调用该方法吗?”,同时“@Model.tasks.Grid”被标为红色下划线。

有趣的是,Visual Studio 编译时一切都很正常。当然,如果我只是简单地执行

@Model.Products.Grid(grid=>{
...
});

一切都好。


如果将null传递给Action会发生什么? - Justin Pihony
也许你需要在 views 文件夹下的 web.config 中指定对“IEnumerableGridExtension”的 dll 引用。 - zs2020
约翰,清理并重新构建后,仍然相同。贾斯汀,将设置为null会输出一个空网格。我的代码处理了这种情况。顺便说一句,感谢P.S.W.G再次的帮助(我决定使用通用方法来处理我的网格 :)),我重新启动了VS 2010,但是还是出现了同样的问题。编译很好,但在编辑器中给我那个错误。Sza,我确实将命名空间放在/views下的web.config中,但没有成功。 - Liming
有其他的方法可以做到这一点。在这里列出来:https://dev59.com/W1TTa4cB1Zd3GeqPqTq5 - Prash
1
@Prash,创建扩展方法有什么问题吗?它不是Razor帮助程序扩展,只是一个普通的IEnumerable。 - John
显示剩余6条评论
1个回答

8

太好了!非常感谢@fcuesta!!!我已经找了两个小时了,天哪!微软真的应该解决这个问题,简直不敢相信这是这么简单的事情! - Liming

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接