【问题标题】:Generic List extension method ForEach stopped working?通用列表扩展方法 ForEach 停止工作?
【发布时间】:2010-12-16 16:45:16
【问题描述】:

我有一个继承 Generic.List 的自定义列表,它有一个取消选择名为 DeselectAll 的所有成员的方法

几个星期以来一直是这样,并且运行良好。

Public Sub DeselectAll()
    MyBase.ForEach(Function(p As Publipostable) p.ModeEnvoiChoisi = Nothing)
End Sub

今天,它停止工作了?!?我使用委托恢复到早期版本并且效果很好......

Public Sub DeselectAll()
    MyBase.ForEach(AddressOf DeselectModeEnvoi)
End Sub

Private Sub DeselectModeEnvoi(ByVal p As IPublipostable)
    p.ModeEnvoiChoisi = Nothing
End Sub

有人见过这种行为吗?它在一个 asp.net 3.5 应用程序中。

只是想知道, 山姆

编辑: 停止工作意味着它不再将列表中每个项目的属性 p.ModeEnvoiChoisi 设置为 Nothing。调用了 DeselectAll 方法,但所有项目都保留了它们以前的值...

【问题讨论】:

  • Stopped Working: 编译器错误或刚刚停止执行任何操作?
  • 什么改变使它停止工作?
  • 注意:ForEachList<T> 上的实例方法,而不是扩展方法。
  • 你能定义“停止工作”吗?
  • 我不敢相信我问了我最讨厌的问题,通用的“不起作用”问题......我的错:$

标签: .net vb.net foreach generic-list


【解决方案1】:

在 .net 3.5 中,VB 没有办法区分相等运算符和集合运算符,因为两者都是“=”并且编译器选择了相等检查(我知道很奇怪)。在 .net 4.0 中,您可以在 lambda 函数中毫无问题地使用集合运算符,但在 .net 3.5 中,您不能在 VB 中使用。

【讨论】:

  • 我会买那个。但为什么它以前有效? (或者也许它没有......该死的不可测试的代码库,arg!)
  • 我会选择第二个,我遇到了同样的问题,直到某些东西期望 for-each 真正起作用,然后我们就像,什么?为什么这不起作用!我很高兴他们在 .net 4 中修复了这个问题,更理智,更少脱发!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 2013-09-03
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多