如何返回空ValueCollection

时间:2010-10-01 23:48:56

标签: .net collections

我有一个字典,其值我想回到这样的调用者:

public ICollection<Event> GetSubscriptions()
{
    return isLockDown ? Enumerable.Empty<Event> : subscriptionForwards.Values;
}

不幸的是,空的可枚举类型与指定的返回类型不兼容。还有另一个BCL设施吗?

P.S。不,它不能将三元组的两个目标都投射为(ICollection<Event>)

4 个答案:

答案 0 :(得分:4)

由于数组实现了IList<T>,而ICollection<T>又扩展了public ICollection<Event> GetSubscriptions() { return isLockDown ? new Event[0] : subscriptionForwards.Values; } ,因此可以为空集合使用空数组。

new List<Event>()

修改
正如其他人指出的那样,您也可以返回new Event[0]。区别在于:

  • new List<Event>()只读,调用者无法向其中添加元素(如果他们尝试则会抛出异常)
  • {{1}}是可变的,来电者可以向其添加元素(尽管每个来电者都有自己的列表,因此其他来电者无法看到更改)

答案 1 :(得分:1)

如果你真的仍然使用Enumerable.Empty,你可以这样做:

public ICollection<Event> GetSubscriptions()
{
    return isLockDown ? Enumerable.Empty<Event>.ToList() : subscriptionForwards.Values;
}

答案 2 :(得分:1)

你可以用这个:

public ICollection<Event> GetSubscriptions()
{
    return isLockDown ? new Collection<Event>() : subscriptionForwards.Values;
}

您需要添加此引用才能使其正常工作:

using System.Collections.ObjectModel;

答案 3 :(得分:1)

您可以随时创建自己的空集合。至少建筑只发生一次。

private static readonly ICollection<Event> EMPTY_EVENTS = new List<Event>();

public ICollection<Event> GetSubscriptions()
{
    return isLockDown ? EMPTY_EVENTS : subscriptionForwards.Values;
}