gpt4 book ai didi

c# - 不是 ICollection 的 IEnumerable 的具体实现

转载 作者:太空宇宙 更新时间:2023-11-03 23:14:14 25 4
gpt4 key购买 nike

我想知道 .net 框架中是否有任何实现 IEnumerable 的类没有实现 ICollection 接口(interface)。

我问它是因为我无法在我编写的以下扩展方法中获得 100% 的代码覆盖率:

public static int GetSafeCount<T>(this IEnumerable<T> nullableCollaction)
{
if (nullableCollaction == null)
{
return 0;
}
var collection = nullableCollaction as ICollection<T>;
if (collection != null)
{
return collection.Count;
}
return nullableCollaction.Count();
}

最后一行没有包含在我的任何测试中,我找不到正确的类来实例化以覆盖它。

我的测试代码是:

[Test]
public void GetSafeCount_NullObject_Return0()
{
IEnumerable<string> enumerable=null;

Assert.AreEqual(0, enumerable.GetSafeCount());
}
[Test]
public void GetSafeCount_NonICollectionObject_ReturnCount()
{
IEnumerable<string> enumerable = new string[]{};

Assert.AreEqual(0, enumerable.GetSafeCount());
}

最佳答案

只需使用任何 LINQ 操作,例如位置:

[Test]
public void GetSafeCount_NonICollectionObject_ReturnCount()
{
IEnumerable<string> enumerable = new string[0].Where(x => x.Length == 0);
Assert.AreEqual(0, enumerable.GetSafeCount());
}

但是,您可以通过推迟到 Enumerable.Count() 来简化您的实现,我希望它可以按照您希望的方式进行优化:

public static int GetSafeCount<T>(this IEnumerable<T> nullableCollection)
=> nullableCollection == null ? 0 : nullableCollection.Count();

或者:

public static int GetSafeCount<T>(this IEnumerable<T> nullableCollection)
=> nullableCollection?.Count() ?? 0;

(两者都假定为 C# 6...)

在这一点上,只有两个测试是有意义的:一个用于空参数,一个用于非空参数。

关于c# - 不是 ICollection<T> 的 IEnumerable<T> 的具体实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37834029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com