我实际上遇到了一个我真的不明白的问题。 场景很简单:
我正在使用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
答案 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时,都必须重新构建整个解决方案(或仅涉及到的项目),并从设备/仿真器中手动删除该应用程序。
它不会每次都发生,但我想避免这种情况是一种必要的做法。
我希望这会对其他人有所帮助