我有一个字典,其值我想回到这样的调用者:
public ICollection<Event> GetSubscriptions()
{
return isLockDown ? Enumerable.Empty<Event> : subscriptionForwards.Values;
}
不幸的是,空的可枚举类型与指定的返回类型不兼容。还有另一个BCL设施吗?
P.S。不,它不能将三元组的两个目标都投射为(ICollection<Event>)
答案 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)
如果你真的仍然使用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;
}