.NET List <string>(通过引用调用?)和Dictionary对象

cdu*_*dub 0 .net c# asp.net list

我有以下代码片段:

Dictionary<int, List<string>> likeListDict = new Dictionary<int, List<string>>();
List<string> lists = new List<string>();

lists.Add("hello");
lists.Add("world");

likeListDict.Add(1, lists);

lists.Clear();

lists.Add("foobar");

likeListDict.Add(2, lists);
Run Code Online (Sandbox Code Playgroud)

在likeListDict.Add(1,lists)部分,"hello"和"world"被添加到key 1中.但是一旦我执行lists.Clear(),并将key 2添加到likeListDict,两个键都为1 2现在有"foobar".如何停止此操作(通过引用调用)并按值调用?

Ada*_*son 5

没有"按引用呼叫"或"按值呼叫"的概念.List<T>是一个引用类型,因此无论您对给定引用执行的操作都将在程序中存在该引用的任何位置可见.

你想要做的是创建一个新的列表而不是调用 lists.Clear();

Dictionary<int, List<string>> likeListDict = new Dictionary<int, List<string>>();
List<string> lists = new List<string>();

lists.Add("hello");
lists.Add("world");

likeListDict.Add(1, lists);

lists = new List<string>();

lists.Add("foobar");

likeListDict.Add(2, lists);
Run Code Online (Sandbox Code Playgroud)