IEnumerable <string> ToList()行为作为参考

时间:2019-09-21 18:26:14

标签: c# linq reference

IEnumerable<string>()中,通过ToList()获得副本后,如果修改副本的项目,字符串是否会被更改?答案是否定的,这很容易测试。

IEnumerable<string> sample = new List<string>() { "1", "2", "3"};
var list = sample.ToList();
foreach(var item in sample)
{
    if (item == "2")
    {
        var idx = list.IndexOf(item);
        list[idx] = "1";
    }   
}

foreach(var item in sample)
{
    Console.WriteLine($"item value: {item}");
}

因此,当字符串在浅表副本的集合内运行时,字符串是值类型而不是引用类型。但是字符串实际上是引用类型。 那么,什么决定字符串表现为值类型呢?应该用“不变”的概念来解释吗?但是,如果您实际上使用了诸如IEnumerable之类的实际引用类型来收集myCustomObject类型的myCustomObject.string类型的集合,那么即使您执行sample.ToList()并且修改copy.string

0 个答案:

没有答案