C# List.Remove delete 元素是否通过比较它们的内存地址?

Is C# List.Remove delete element by compare their memory address?

提问人:ungsan 提问时间:10/29/2023 最后编辑:Theodor Zouliasungsan 更新时间:10/29/2023 访问量:38

问:

class secretClass
{
    public string name;
    public int score;
}

private void start()
{
    List<secretClass> secretList = new List<secretClass>();
    secretClass temp = new secretClass() { name="hello", score=10 };
    secretList.Add(temp);

    secretClass temp1 = new secretClass() { name = "super", score = 24 };
    secretList.Add(temp1);

    secretClass temp2 = new secretClass() { name = "power", score = 30 };
    secretList.Add(temp2);


    readAllSecretClass(secretList);

    Console.WriteLine("\n\n");
    secretList.Remove(temp); // <- can remove if have that class
    secretList.Remove(temp2);
    readAllSecretClass(secretList);

}

void readAllSecretClass(List<secretClass> list)
{
    if (list.Count != 0)
        for (int i = 0; i < list.Count; i++)
            Console.WriteLine(list[i].name);
    else
        Console.WriteLine("nothing to read in this list");
}

这段代码如何完美地工作?List.Remove

是否使用其内存地址(引用)处理对象??List.Remove

到目前为止,我使用()函数来清理列表,但是从现在开始,如果它通过接近他们的内存地址来删除元素,我可以更轻松地管理!RemoveAtListList

C# 列表

评论

4赞 Jon Skeet 10/29/2023
首先,我强烈建议您开始遵循 .NET 命名约定。试着尽快养成好习惯。但基本上,文档指出:“如果 type 实现了泛型接口,则相等比较器是该接口的方法;否则,默认的相等比较器为 。换句话说,它调用了 的每个实例,该实例不会重写 - 因此它正在执行引用比较。TIEquatable<T>EqualsObject.EqualsEqualssecretClassEquals
0赞 ungsan 11/2/2023
真的很谢谢你的建议。.我会牢记这一点

答: 暂无答案