FirstOrDefault似乎不评估或条件

时间:2019-07-28 09:33:51

标签: c# linq xamarin.forms

我实际上遇到了一个我真的不明白的问题。 场景很简单:

我正在使用Xamarin.Forms 4.1.0开发跨平台应用程序,并且需要使用ObservableCollection过滤Linq中的元素。 集合由具有两个相同类型的子元素(左和右)的元素组成。 在这里,您的代码部分会给我带来麻烦:

var element = MyCollection.FirstOrDefault(e => e.Left.Item.Id == searchId || e.Right.Item.Id == searchId);

如果所请求的id与左元素相同(那么第一个要在或条件中求值),则一切都很好,但是如果我请求的ID与右元素中的一个相等,{{1 }}返回null,就像条件被第一个语句短路一样。我还尝试过分离操作,将条件放在FirstOrDefault之前的Where函数中,但是没有任何变化。

有什么建议吗?谢谢!

编辑 抱歉,这里有更多代码

FirstOrDefault

1 个答案:

答案 0 :(得分:0)

我想我已经找到了这个问题的原因。

问题在于xamarin.forms仅重建解决方案就不能正确地重新加载已部署的应用程序。

FirstOrDefault内部的lambda表达式最初只是

e => e.Left.Item.Id == searchId

代替

e => e.Left.Item.Id == searchId || e.Right.Item.Id == searchId

要解决此类问题,每次修改xaml或cs时,都必须重新构建整个解决方案(或仅涉及到的项目),并从设备/仿真器中手动删除该应用程序。

它不会每次都发生,但我想避免这种情况是一种必要的做法。

我希望这会对其他人有所帮助