gpt4 book ai didi

c# - AddRange 授予公众访问列表的权限

转载 作者:行者123 更新时间:2023-11-30 19:56:40 25 4
gpt4 key购买 nike

我有一些遗留的 C# 代码,其中包含以下部分:

private List<MyClass> mList = new List<MyClass>();

public List<MyClass> getList()
{
List<MyClass> list = new List<MyClass>();
list.AddRange(mList);
return list;
}

不确定这里 AddRange 的目的是什么?我可以将其重写为:

public List<MyClass> getList()
{
return mList;
}

最佳答案

没有。

如果你简单地使用 return mlist , 你返回 mlist实例,而原始代码返回它的浅拷贝。


假设你的类看起来像这样:

class Foo
{
public Foo()
{
mList.Add(1);
}

private List<int> mList = new List<int>();

public List<int> getList()
{
List<int> list = new List<int>();
list.AddRange(mList);
return list;
}
}

现在你跑

var x = new Foo();
x.getList().Add(2);
x.getList().Add(3);

mList的内容还是会单例1 ,因为调用 getList退还副本 mList ,而不是列表本身。

如果您像在问题中那样更改代码,您将更改 mList它现在将包含元素 1 , 2 , 和 3 .


从方法名称中看不出是否返回了副本,因此您可能希望将其更改为类似于 GetListCopy 的名称(在这种情况下,该方法可以简单地返回 new List<MyClass>(mList)mList.ToList() ),或者将列表作为 IReadOnlyList 返回以明确列表不应更改。

public IReadOnlyCollection<MyClass> getList()
{
return mList.AsReadOnly();
}

关于c# - AddRange 授予公众访问列表的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33211324/

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