gpt4 book ai didi

C# ArrayList.Add 方法向项目添加引用?

转载 作者:太空宇宙 更新时间:2023-11-03 18:35:52 33 4
gpt4 key购买 nike

0假设我创建了一个 ArrayList 并添加了两个字符串:

string item1 = string.Empty;
string item2 = string.Empty;

ArrayList someList = new ArrayList();
someList.Add(item1);
someList.Add(item2);

someFunc(someList);

然后我获取 someList 并将其传递给一个方法。该方法对 item1 和 item2 执行一些操作并返回,如下所示:

public void someFunc(ArrayList parameters)
{
parameters[0] = "Monkeys";
parameters[1] = "More Monkeys";
}

我希望当 someFunc 返回时,item1 等于“Monkeys”,item2 等于“More Monkeys”,因为 someList 分别在索引 0 和 1 中包含对 item1 和 item2 的引用。但是,我看到的是 item1 等于“Monkeys”,item2 等于“”。

为什么?如果不通过 ref 单独传递每个项目,我将如何执行此壮举?

最佳答案

您的代码根本不会按照您的预期进行。你的变量 item1item2不会通过重新分配到列表来修改。您不能将对变量引用添加到ArrayList (或者最好是现代 .NET 世界中的 List<T> )。您可以简单地添加值本身(可以是对象 的引用)。当您覆盖最初存储在列表中的值时,它不会影响以前的变量。

如果您需要更新列表内部以反射(reflect)外部变量,您可能需要不同的抽象。例如,您将变量类的属性,然后维护该类的列表。然后您可以通过更改属性来改变类,而不是覆盖列表的内容。 Niyoko Yuliawan's answer 中演示了此技术。 ,所以我不会重新显示它。

Another technique mentioned是将值读回您的变量。如果列表具有相同数量的相同顺序的值,这是可行的。但是,我应该注意,如果您要将多个值添加到列表中,将它们传递到方法中,更改列表中的值,然后将这些值重新读取到您的变量中,您可能不需要列表,您需要上课。 如果item1item2真的 firstNamelastName ,例如,您不想要 ArrayList list (或者,再次,最好是 List<string> list ),你真的想要 Person personstring FirstNamestring LastName属性。

如果你有

public void SomeFunc(ArrayList list)
{
list[0] = "Sam";
list[1] = "Smith";
}

您可能应该考虑定义一个类,然后使用该类。

public class Person 
{
public string FirstName { get; set; }
public string LastName { get; set; }
}

// elsewhere in your code...

public void SomeFunc(Person person)
{
person.FirstName = "Sam";
person.LastName = "Smith";
}

关于C# ArrayList.Add 方法向项目添加引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15640643/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com