C# 将列表作为参数传递
我似乎对对象的引用有一个意想不到的问题。我的代码有一个草案:C# 将列表作为参数传递,c#,list,reference,C#,List,Reference,我似乎对对象的引用有一个意想不到的问题。我的代码有一个草案: // file 1 List<A> list1; List<B> list2 = function(list1); //file 2 public static List<B> function(List<A> input) { list<B> output = new List<B>(); for (int i ...) {
// file 1
List<A> list1;
List<B> list2 = function(list1);
//file 2
public static List<B> function(List<A> input)
{
list<B> output = new List<B>();
for (int i ...)
{
output.Add(new B(input[i]));
{
return output;
}
// file 1
list1[1].FieldOfAObject = 10; // I change an object from list1
WriteLine(list2[1].objectA.FieldOfAObject); // it is not changed
我知道里面有很多颂歌,这就是我不想发布它的原因。这段代码打印的是“20”,我想这就是你想要的
public class A
{
public int Value;
}
public class B
{
public A objectA;
public B(A obj)
{
objectA = obj;
}
}
class Program
{
public static List<B> function(List<A> input)
{
List<B> output = new List<B>();
foreach (var i in input)
{
output.Add(new B(i));
}
return output;
}
static void Main(string[] args)
{
List<A> listA = new List<A>();
listA.Add(new A { Value = 10 });
List<B> listB = function(listA);
listA[0].Value = 20;
Console.WriteLine(listB[0].objectA.Value);
}
}
公共A类
{
公共价值观;
}
公共B级
{
公众反对A;
公共B(A obj)
{
objectA=obj;
}
}
班级计划
{
公共静态列表功能(列表输入)
{
列表输出=新列表();
foreach(输入中的var i)
{
增加(新的B(i));
}
返回输出;
}
静态void Main(字符串[]参数)
{
List listA=新列表();
Add(新的A{Value=10});
List listB=函数(listA);
listA[0]。值=20;
Console.WriteLine(listB[0].objectA.Value);
}
}
你能展示B的构造器吗?这里没有人能猜出B
类型的行为,因此如果你想知道为什么它不能像你期望的那样工作,你必须发布它。此外,发布真实代码,因为代码没有编译(定义不完整,大括号放置不正确)等等。这让人很难相信这是真实代码的精简版本。如果您需要有关实际代码的帮助,请发布实际代码,或者更好,发布a。为什么要实例化listB
以function(listA)
替换它?另外,A.Value
和B.objectA
都应该是属性,而不是字段。代码的目的是证明B包含对A的引用,而这正是OP存在的问题。它可以在很多方面得到改进…:)如果你向一个刚开始学习的人展示坏习惯,他们就会学到坏习惯。我已经见过太多次使用a=newlist()之类的东西编写生产代码;a=GetData()代码>随时发布更好的answer@HansKilian你的代码比我的代码更简单,我不知道为什么我的代码会失败。
public class A
{
public int Value;
}
public class B
{
public A objectA;
public B(A obj)
{
objectA = obj;
}
}
class Program
{
public static List<B> function(List<A> input)
{
List<B> output = new List<B>();
foreach (var i in input)
{
output.Add(new B(i));
}
return output;
}
static void Main(string[] args)
{
List<A> listA = new List<A>();
listA.Add(new A { Value = 10 });
List<B> listB = function(listA);
listA[0].Value = 20;
Console.WriteLine(listB[0].objectA.Value);
}
}