假设我在数组A
的索引5处有items
类型的对象,我想将其更改为B
类型的新对象。
如果我有对数组的引用,我可以items[5] = new B();
来更改项目。
但是,假设我只有items[5]
处的对象而不是对数组的引用,并且它存储在变量item
中。如果我只做item = new B();
,则更改不会反映在数组中,因为只会更改该变量。
是否可以更改该项目以使更改反映在数组中,以便items[5]
将包含B
类型的新项?
最好不要使用代表或lambdas之类的东西,因为它在某种程度上对性能至关重要。
答案 0 :(得分:1)
我相信在这种情况下你应该使用ref。
演示示例:
public class Program
{
public static void Main()
{
var list = new List<Sample>();
list.Add(new SampleDerived(){ Age=2, DAge = 5 });
list.Add(new SampleDerived(){ Age=3, DAge = 5 });
list.Add(new SampleDerived(){ Age=4, DAge = 5 });
list.Add(new SampleDerived(){ Age=5, DAge = 5 });
list.Add(new SampleDerived(){ Age=6, DAge = 5 });
var list2 = list.ToArray();
Process(ref list2[2]);
Console.WriteLine(list2[2].Age); // will print 10 not 4
}
public static void Process(ref Sample s)
{
s = new Sample(){Age=10};
}
}
public class Sample
{
public int Age {get; set;}
}
public class SampleDerived : Sample
{
public int DAge {get; set;}
}
Dot net fiddler是here。