我有点疯狂。我有一个类似以下的功能。它没有返回一个对象。我可以传入一个列表,我可以在QuickWatch
中看到列表中至少有一个项x.RB = theRb
,但它不会退出循环(通过Return)。循环继续。
我传递的列表是aXXX
的子类。
班级RB
上的aXXX
属性类型为RBEnum
。
另外,我最初使用Linq但是得到了“没有匹配的项目”例外。
Private Shared Function GetX(Of T As aXXX)(ByVal a As List(Of T),
ByVal theRb As RBEnum) As T
For Each x As T In a
If (x.RB = theRb) Then Return x
Next
Return Nothing
End Function
有关为什么不起作用的任何建议或想法?
答案 0 :(得分:1)
我建议尝试:
If (x.RB.Equals(theRb)) Then Return x
答案 1 :(得分:0)
你可以将Enum转换为整数然后进行比较吗?
If CInt(x.RB)=CInt(theRb) Then Return x
答案 2 :(得分:0)
我不确定你的原始陈述是如何写的,但是这应该产生你正在寻找的结果:
Private Shared Function GetX(Of T As aXXX)(ByVal a As List(Of T),
ByVal theRb As RBEnum) As T
Return a.Where(Function(x) x.RB = theRb).FirstOrDefault()
End Function
答案 3 :(得分:0)
我有决心。我不能完全解释它。
我传入的项目列表是aXXX类的子类。子类没有正确覆盖基类的RB
属性 - 没有Overloads
/ Overrides
/ Shadows
。这个类型的解释了为什么QuickWatch在匹配时报告True - 也许这个子类属性隐藏了测试中的“真实”属性值?
无论如何,通过一起取出子类中的属性或添加Overloads
,For Each的行为就像人们期望的那样。我甚至可以回到我在函数中的原始Linq版本。
我想这归结为我的疏忽/草率编码。但QuickWatch报道“误报”这个问题很好地掩盖了这个问题!
感谢大家的建议和帮助。