Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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#_List_Reference - Fatal编程技术网

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);
      }
 }