C# 如何在不引用数组的情况下更改数组对象?
假设在数组C# 如何在不引用数组的情况下更改数组对象?,c#,arrays,reference,C#,Arrays,Reference,假设在数组items的索引5处有一个A类型的对象,我想将其更改为B类型的新对象 如果我有一个数组的引用,我可以只做items[5]=newb()以更改项目 但是,假设我只在items[5]处有对象,而没有对数组的引用,它存储在变量item中。如果我只做item=newb(),更改将不会反映在数组中,因为只会更改该变量 是否可以更改该项,以使更改反映在数组中,从而项[5]将包含B类型的新项 最好是不使用委托或lambda之类的简单工具,因为它对性能有点关键。我认为在这种情况下,您应该使用 演示示例
items
的索引5处有一个A
类型的对象,我想将其更改为B
类型的新对象
如果我有一个数组的引用,我可以只做items[5]=newb()代码>以更改项目
但是,假设我只在items[5]
处有对象,而没有对数组的引用,它存储在变量item
中。如果我只做item=newb()代码>,更改将不会反映在数组中,因为只会更改该变量
是否可以更改该项,以使更改反映在数组中,从而项[5]
将包含B
类型的新项
最好是不使用委托或lambda之类的简单工具,因为它对性能有点关键。我认为在这种情况下,您应该使用
演示示例:
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;}
}
公共类程序
{
公共静态void Main()
{
var list=新列表();
Add(newsamplederived(){Age=2,DAge=5});
Add(newsamplederived(){Age=3,DAge=5});
Add(newsamplederived(){Age=4,DAge=5});
Add(newsamplederived(){Age=5,DAge=5});
Add(newsamplederived(){Age=6,DAge=5});
var list2=list.ToArray();
过程(参考清单2[2]);
Console.WriteLine(list2[2].Age);//将打印10而不是4
}
公共静态无效流程(参考样本s)
{
s=新样本(){Age=10};
}
}
公共类样本
{
公共整数{get;set;}
}
公共类Sample派生:Sample
{
公共整数DAge{get;set;}
}
Dot net fiddler是。进程使用list2[2]
作为参数。其中一个要求是我只能访问对象,而不能访问数组或数组中的项索引。您是如何获得该对象的?它是对数组中对象的引用还是数组中对象的副本?@VeselinVasilev被称为“按引用传递”。有关详细信息,请查看MSDN链接。它是对数组中对象的引用。也就是说,它是一个不同的变量,但指向数组中的对象。@NathanaëlRadomír我认为这是不可能的。在方法调用之前,您必须维护对对象的一些引用。您可以使用指针(不安全代码),但我不推荐使用。