Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不引用数组的情况下更改数组对象?_C#_Arrays_Reference - Fatal编程技术网

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我认为这是不可能的。在方法调用之前,您必须维护对对象的一些引用。您可以使用指针(不安全代码),但我不推荐使用。