我正在尝试执行以下代码,如果myObject是!= null,它可以正常工作,但如果myObject为null,则抛出“value not not null”错误。理想情况下,如果myObject为null,那么我想让HashSet的值为0。
var ids = new HashSet<int>(myObject.Select(p => p.ID));
我尝试了几件不同的事情。我不确定为什么我认为这会起作用。
var ids = new HashSet<int>(myObject.Select(p => p.ID).Where(p => p != null));
这似乎应该有效。
var ids = new HashSet<int>(myObject.Select(p => (p == null) ? 0 : p.ID));
最后这有效,但似乎必须有更好的方法。
var ids = new HashSet<int>(myObject!= null ? myObject.Select(p => p.ID) : new int[] {0});
任何人都有更好的方法吗?
答案 0 :(得分:1)
如果myObject为null,则代码转换为
var ids = new HashSet<int>(null.Select(p => p.ID));
您不能使用选择扩展方法的空值。
您的替代
var ids = new HashSet<int>(myObject!= null ? myObject.Select(p => p.ID) : new int[] {0});
是我所知道的最紧凑的形式,以满足您的要求,但如果您愿意,您当然可以隐藏方法或扩展方法中的复杂性。
答案 1 :(得分:1)
现在,您的答案可以稍微清理一下:
var ids = new HashSet<int>(myObject?.Select(p => p.ID) ?? new [] {0});