【问题标题】:Generate a list of all objects of a class [duplicate]生成一个类的所有对象的列表[重复]
【发布时间】:2021-08-18 03:53:21
【问题描述】:

我很年轻,正在为自己的简单概念或坏主意而苦苦挣扎。在下面的情况下,我创建了两个对象 BAnimal 并将它们添加到列表 BAnimalL 中。

var FennecFox = new BAnimal("Fennec Fox", "FennecFox");
var Cat = new BAnimal("Cat", "Cat");
    
BAnimalL.Add(FennecFox);
BAnimalL.Add(Cat);

这很好,我已经看到了替代方法,并且可以根据需要阅读这些方法以使其不那么笨重。我找不到答案是:是否可以生成特定类的所有对象的列表?我正在开发一款为某些课程内置了这些功能的电脑游戏,但我想还有其他方法。

相关:这种事情,没有分配对象名称:

new BAnimal("Badger", "Badger");

可以用这个做任何事情吗?调试器建议我给它添加一个丢弃符号。

很明显,我想我可以创建这些对象,然后创建一个所有对象的列表。如果您能提供帮助,谢谢;没有什么建议太简单了。

【问题讨论】:

  • 你可以做BAnimalL.Add(new BAnimal("Fennec Fox", "FennecFox"));BAnimalL.Add(new BAnimal("Cat", "Cat"));
  • 谢谢,我也一直在玩这个。我还没有完全理解它没有(名称或索引或参考?)= FennecFox 的意义或其他方面。这意味着我可以像 BAnimalL.Add(FennecFox); 一样引用它。编译器想要添加到丢弃的唯一区别是它在列表中。这会阻止它被丢弃吗?这可以作为最佳实践吗,无论是使用参考名称还是在列表中?

标签: c# list object


【解决方案1】:

一个类可以有一个构造器和静态成员。一个简单的解决方案是:

class BAnimal
{
   static List<BAnimal> allInstances = new();
   
   public BAnimal(string s, string t) 
   {    
      ... // initialize
      allInstances.Add(this);
   }

}

但我想警告您,这通常不是一个好主意。跟踪其实例不是类的责任。

您通常会有一个 Game(或 Zoo)对象来创建、跟踪和删除其他对象。

【讨论】:

  • 您可以在stackoverflow.com/questions/14939397/… 中简单地取消删除您的(几乎相同的)答案:)
  • 谢谢。我想答案是“最佳实践使它没有必要,所以它不存在”。在创建对象时执行此操作是有意义的。这确实是我正在使用的游戏的外部数据(到我的项目)。
猜你喜欢
  • 2017-10-13
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
相关资源
最近更新 更多