Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 - Fatal编程技术网

C# 将类的所有对象放入列表中

C# 将类的所有对象放入列表中,c#,list,C#,List,我在c#中有一个类,叫做c。当我执行程序时,我创建这个类的新对象。在某个时候,我需要创建一个listlist listC=newlist()放置我创建的所有对象的位置。 当然,我可以使用list.Add在创建此对象后为每个对象添加。但由于某些难以解释的原因,我更愿意将thiiss类创建的所有对象添加到列表中 这有可能吗?我不确定是否有解决办法:-) 提前感谢所有回答的人。您可以在创建对象时直接添加到列表中,例如: List<C> list = new List<C>();

我在c#中有一个类,叫做c。当我执行程序时,我创建这个类的新对象。在某个时候,我需要创建一个list
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报告进度的对象,我自己使用的正是这种模式。工厂报告的总产量为