【问题标题】:C# List ObjectsC# 列出对象
【发布时间】:2013-04-06 18:33:05
【问题描述】:

我有一个我制作的 Character 对象列表和一个可以包含一个字符的 Cells 列表。是否可以将我的角色对象添加到列表中并分配给一个单元格,并在派对列表或单元格中对其进行更改以在两个地方影响对象?我真的不知道指针将如何解决这个问题。我认为列表中的对象与分配给单元格的对象是一个单独的对象。

对不起,我的代码非常大,所以我不想在这里全部发布,但我正在谈论的 Character 是我制作的自定义类。我想我的问题实际上可以归结为两个问题。当我将某些东西放入列表时,就是改变指针指向的位置,或者是一个新对象。如果我将某些内容添加到列表然后将其分配给角色对象的另一个实例,我也可以有多个指针,这将引用来自单元对象的角色与从另一个列表对象引用我的角色相同。

【问题讨论】:

  • 向我们展示您的代码,并告诉我们更多关于您的应用程序以及您希望它如何运行的信息。 char 是原始类型,所以它们基本上是值并且具有值语义。但是你的问题的答案将取决于你的代码是什么样的。
  • 看看 Jon Skeet 的这两篇文章 - Parameter Passing in C#Memory in .NET - what goes where

标签: c# list pointers


【解决方案1】:

只要您的Character 是一个类(即reference type),那么您实际上就是在存储对Character 对象的引用。当通过任何其他引用访问对象时,您通过对对象的引用对对象所做的任何更改都将可见。

例子:

class Character
{
    public string Name { get; set; }
}

var c = new Character();
var c2 = c;
var arr1 = new Character[] { c };
var arr2 = new Character[] { c };

arr1[0].Name = "Foo";
Console.WriteLine(arr2[0].Name); // "Foo"
Console.WriteLine(c2.Name); // also "Foo"

【讨论】:

  • 那么我可以对同一个对象有两个引用吗?我有一个包含它的列表,然后我有另一个自定义对象也需要访问该对象,但我不知道何时需要从自定义对象中引用我的角色以及何时需要从列表中引用它。跨度>
  • @maxinfet:是的。每当您使用赋值运算符或将“对象”传递给函数时,都会创建对同一对象的新引用。
【解决方案2】:

所以基本上你想把 Characters 当作一个引用类型。

只需创建您自己的包装对象,其中包含一个字符。

public MyCharacter
{
public char character{get;set;}
}

对象是通过引用来处理的,所以它应该适合你。

【讨论】:

    猜你喜欢
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2022-11-27
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多