Hashset“值不能为空”错误

时间:2012-07-24 02:40:34

标签: c# hash hashmap hashtable

我正在尝试执行以下代码,如果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});

任何人都有更好的方法吗?

2 个答案:

答案 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});