Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在将列表设置为新集合之前清除列表可能会产生哪些副作用?_C#_List - Fatal编程技术网

C# 在将列表设置为新集合之前清除列表可能会产生哪些副作用?

C# 在将列表设置为新集合之前清除列表可能会产生哪些副作用?,c#,list,C#,List,我继承了一些代码。我看到这个代码存在: private List<int> Data { get; set; } private CsClipboard() { Data = new List<int>(); } public List<int> ComponentIDs { get { return Data; } set { Data.Clear(); Da

我继承了一些代码。我看到这个代码存在:

private List<int> Data { get; set; }

private CsClipboard()
{
    Data = new List<int>();
}

public List<int> ComponentIDs
{
    get
    {
        return Data;
    }
    set
    {
        Data.Clear();
        Data = value;
    }
}
私有列表数据{get;set;}
私人董事会()
{
数据=新列表();
}
公共列表组件
{
收到
{
返回数据;
}
设置
{
Data.Clear();
数据=价值;
}
}
我看不出有任何理由在将数据设置为值之前调用clear。我想知道在C#中是否存在这样的场景:我想在设置值之前调用clear,而不是触发OnClear事件。这是一个相当大的技术债务代码库,所以过于谨慎

我想在将值从 类似于触发OnClear事件

List类没有事件

那么,为列表编写自己的自定义清除方法如何


我的意思是list类的扩展方法,它将使用Clear方法和自定义逻辑,代码可能会有一些不好的副作用

发生的事情是原始列表被清除。因此,代码中保存原始列表的每个其他位置现在都将保存一个空列表


每个新的get请求都将保存新列表。但是数据在整个程序中不是并发的。

一般来说,应该避免返回可变列表的公共属性。一旦消费者获得了对它的引用,您就不再保证应该是内部细节的状态。清除setter中的列表只会加剧问题,因为现在您正在清除消费者可能仍然有引用的列表(即使它不再是正确的列表)


您应该考虑更改属性,以便返回列表当前状态的一个副本(最好是只读)。

AsReadOnly()。如果你不能做到这一点,至少在设置新值之前不要清除列表。

我看不出这与这个问题有什么关系。@TimSchmelter OP在帖子中有这样一行:“我想在设置值之前调用clear,而不是触发OnClear事件。”所以我在回答这个问题。哦,我完全同意这很可怕。现在就试着管理它,而不破坏任何我不知道存在的东西,所以我无法测试。:)