C# 将类的所有对象放入列表中
我在c#中有一个类,叫做c。当我执行程序时,我创建这个类的新对象。在某个时候,我需要创建一个listC# 将类的所有对象放入列表中,c#,list,C#,List,我在c#中有一个类,叫做c。当我执行程序时,我创建这个类的新对象。在某个时候,我需要创建一个listlist listC=newlist()放置我创建的所有对象的位置。 当然,我可以使用list.Add在创建此对象后为每个对象添加。但由于某些难以解释的原因,我更愿意将thiiss类创建的所有对象添加到列表中 这有可能吗?我不确定是否有解决办法:-) 提前感谢所有回答的人。您可以在创建对象时直接添加到列表中,例如: List<C> list = new List<C>();
list listC=newlist()代码>放置我创建的所有对象的位置。
当然,我可以使用list.Add在创建此对象后为每个对象添加。但由于某些难以解释的原因,我更愿意将thiiss类创建的所有对象添加到列表中
这有可能吗?我不确定是否有解决办法:-)
提前感谢所有回答的人。您可以在创建对象时直接添加到列表中,例如:
List<C> list = new List<C>();
for(var i = 0; i < 10; i++) {
list.Add(new C());
}
List List=新列表();
对于(变量i=0;i<10;i++){
添加(新的C());
}
或者,您可以将列表传递给类,并让它添加自己:
List<C> list = new List<C>();
public class C
{
public C(List<C> list)
{
list.Add(this);
}
}
List List=新列表();
公共C类
{
公共事务主任(名单)
{
列表。添加(此);
}
}
如果将列表设置为静态,则可以不传递列表而直接删除它。您可以在创建对象时直接将其添加到列表中,例如:
List<C> list = new List<C>();
for(var i = 0; i < 10; i++) {
list.Add(new C());
}
List List=新列表();
对于(变量i=0;i<10;i++){
添加(新的C());
}
或者,您可以将列表传递给类,并让它添加自己:
List<C> list = new List<C>();
public class C
{
public C(List<C> list)
{
list.Add(this);
}
}
List List=新列表();
公共C类
{
公共事务主任(名单)
{
列表。添加(此);
}
}
如果将列表设置为静态,则可以不通过列表就可以逃脱。解决该问题的方法可能是这样的:
要“找到”特定类型的所有对象是不可能的,您可以从一开始就构建和维护此列表。您可以通过创建一个“工厂”方法来实现这一点,该方法创建一个新的c
对象,将其添加到语音列表中,并返回其引用。“工厂”函数和列表可以(也可能应该)是单例的,这取决于您将如何使用它。解决该问题的方法可能是这样的:
要“找到”特定类型的所有对象是不可能的,您可以从一开始就构建和维护此列表。您可以通过创建一个“工厂”方法来实现这一点,该方法创建一个新的c
对象,将其添加到语音列表中,并返回其引用。“工厂”函数和列表可以(也可能应该)是单例的,这取决于您将如何使用它。您需要的是所谓的。您可以使用类来构造类并跟踪所构造的内容
public class CFactory
{
public CFactory()
{
CreatedCBacking = new List<C>();
}
private List<C> CreatedCBacking;
public IList<C> CreatedC
{
get
{
return CreatedCBacking.AsReadonly();
}
}
public C NewC(String s, string t, bool b)
{
C temp = new C(s, t, b);
CreatedCBacking.Add(temp);
return temp;
}
}
public class C
{
public C(String s, string t, bool b)
{
//You class here
}
}
你所需要的是所谓的。您可以使用类来构造类并跟踪所构造的内容
public class CFactory
{
public CFactory()
{
CreatedCBacking = new List<C>();
}
private List<C> CreatedCBacking;
public IList<C> CreatedC
{
get
{
return CreatedCBacking.AsReadonly();
}
}
public C NewC(String s, string t, bool b)
{
C temp = new C(s, t, b);
CreatedCBacking.Add(temp);
return temp;
}
}
public class C
{
public C(String s, string t, bool b)
{
//You class here
}
}
那么超出范围的实例(垃圾收集)呢,将其添加到内部列表我会将其添加到构造函数中,然后将其从finalize或c#中的等效函数调用的列表中删除。@dutt:只要它在列表中,就永远不会有对finalizer的调用。构造函数的想法听起来不错,但我该怎么做呢。目前,我的构造函数需要字符串和一个bool,因此看起来像:public(字符串s,字符串t,bool b);如何将要添加的对象添加到列表中?以及超出范围(垃圾收集)的实例如何,将其添加到内部列表我会将其添加到构造函数中,然后将其从finalize或c#中的等效函数调用的列表中删除。@dutt:只要它在列表中,就永远不会有对finalizer的调用。构造函数的想法听起来不错,但我该怎么做呢。目前,我的构造函数需要字符串和一个bool,因此看起来像:public(字符串s,字符串t,bool b);如何将对象添加到列表中?这与Henk在回答中提到的问题相同:C
的实例只要在列表中,就不会被垃圾收集。@DanielHilgarth如果我在工厂中使用单例或静态类,这将是真的。但是,由于您必须创建工厂的实例,并且工厂的内部列表不是静态的,因此当工厂被垃圾收集时,内部列表中的项目(如果所有其他引用都被释放)也会被确定。但这不是重点。这里有一个全有或全无的场景。收集由某个工厂实例创建的所有实例,或者不收集任何实例。这甚至可能是OP想要的,所以它不一定是坏的。但我发现应该明确指出这一点,因此我发表了评论。没错,如果工厂不再像列表中那样存在,那就不是问题。对于需要向GUI报告进度的对象,我自己使用的正是这种模式。工厂将所有子对象的总聚合进度报告给一个进度条,当我不再需要它们时(我等待的进度完成),我将处理我的工厂和所有基础子对象。@DanielHilgarth您可以在该工厂中使用它来存储创建的实例。不要忘记检查null并从列表中删除垃圾收集的条目。这与Henk在回答中提到的问题相同:C
的实例只要在这个列表中,就不会被垃圾收集。@DanielHilgarth如果我在工厂中使用单例或静态类,这是正确的。但是,由于您必须创建工厂的实例,并且工厂的内部列表不是静态的,因此当工厂被垃圾收集时,内部列表中的项目(如果所有其他引用都被释放)也会被确定。但这不是重点。这里有一个全有或全无的场景。收集由某个工厂实例创建的所有实例,或者不收集任何实例。这甚至可能是OP想要的,所以它不一定是坏的。但我发现应该明确指出这一点,因此我发表了评论。没错,如果工厂不再像列表中那样存在,那就不是问题。对于需要向GUI报告进度的对象,我自己使用的正是这种模式。工厂报告的总产量为