如何在不引用数组的情况下更改数组对象?

时间:2015-03-23 03:17:07

标签: c# arrays reference

假设我在数组A的索引5处有items类型的对象,我想将其更改为B类型的新对象。

如果我有对数组的引用,我可以items[5] = new B();来更改项目。

但是,假设我只有items[5]处的对象而不是对数组的引用,并且它存储在变量item中。如果我只做item = new B();,则更改不会反映在数组中,因为只会更改该变量。

是否可以更改该项目以使更改反映在数组中,以便items[5]将包含B类型的新项?

最好不要使用代表或lambdas之类的东西,因为它在某种程度上对性能至关重要。

1 个答案:

答案 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

相关问题