gpt4 book ai didi

c# - 我可以测试两个 ArrayList (C#) 实例的值相等性吗?

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

我写了一个小的辅助方法 contentsToArrayList。如果我向它传递一个实现 ICollection 的对象,它会返回一个包含与原始对象相同元素的 ArrayList。如果我将另一个对象传递给它,它会返回一个包含该对象本身的 ArrayList。

现在我想测试这个方法。我的单元测试看起来像这样(有点缩写,我包含了更多的测试用例):

        //Arrange
int a = 1;
ArrayList aAsArrayList = new ArrayList();
aAsArrayList.Add(a);
List<int> f = new List<int>() { 4, 5, 6 };
ArrayList fAsArrayList = new ArrayList(f);

//Act
ArrayList aReturned = contentsToArrayList(a);
ArrayList fReturned = contentsToArrayList(f);

现在我不确定如何编写我的断言。基本上,我想确保 aAsArrayList 包含与 aReturned 相同的对象。但是 ArrayList 是一个引用类型,我不确定它是否定义了值相等。我是否可以使用 aReturned == aAsArrayList 之类的方法轻松比较数组列表,还是必须比较数组列表的每个成员?

最佳答案

I am not sure it has value equality defined.

你是对的,它没有定义值相等。

一种比较方式ArrayList相等对象正在使用 LINQ:

if (aReturned.Cast<object>().SequenceEqual(fReturned.Cast<object>())) {
...
}

转换为 object是最“宽容”的——它们不会在您的测试中触发转换异常。如果您知道这两个数组都包含 int 类型的值,您可以替换 Cast<object>() 中的类型至 Cast<int>() .

关于c# - 我可以测试两个 ArrayList (C#) 实例的值相等性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18055482/

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