如何设置对象值而不是引用?

时间:2016-05-29 00:08:45

标签: c#

我以不同的方式问过这个问题而且没有人回答我,现在我以一个例子问这个问题,希望我能做的事情很清楚。

List<object> l1 = new List<object>() {"string1", "string2"};
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("aKey", l1[l1.Count - 1]);
object obj = map["aKey"];

如何更改obj以更改当前指向的l1[1]值?

obj = "newString";会将obj设置为"newString"并保留l1[1] - "string2"不变,因为object是引用类型。但我不想要那个

或者至少从中获取1l1

我的整个设计是这样的,我有两个List的存储空间。

例如,您调用Engine.Save

默认情况下,Save将从列表2中获取最后一个元素,但如果给定一个键作为参数,它将从两个列表中的一个中获取相应的元素。将决定元素的类型并相应地保存它或记录错误消息。

我无法轻易解释这一点,也无法发布那么多代码。

1 个答案:

答案 0 :(得分:0)

在字典中,您可以使用元组单独存储对列表和索引的引用:

// Set up the list.
var myList = new List<object>() {"string1", "string2"};

// Set up the dictionary.
var myDict = new Dictionary<string, Tuple<List<object>, int>>();
myDict.Add("myKey", new Tuple<List<object>, int>>(myList, myList.Count - 1));

// Update the list by using the dictionary.
var theTuple = myDict["myKey"];
var theList = theTuple.Item1;
var theIndex = theTuple.Item2;
theList[theIndex] = "newString";