【问题标题】:How Can I create objects of List<MyClass> dynamically?如何动态创建 List<MyClass> 的对象?
【发布时间】:2016-11-01 19:15:14
【问题描述】:

如何动态创建 MyClass 的对象?我有嵌套列表,我将从我的 DataTable 中获取嵌套列表的计数,所以我不知道我需要多少个对象。 我正在循环中工作。

我可以就示例获得一些帮助吗?

for (int i = 0; i < table.Rows.Count; i++)
{
List<MyClass> names[i] = new List<Checklists>();
}

所以我会得到:

names0
names1
names2
......n

然后我会添加像

这样的元素
name0.Add(new MyClass(...))
name1.Add(new MyClass(...))
name2.Add(new MyClass(...))

…………

我在 StackOverFlow 上阅读了一些问题,但它们对我的情况没有帮助,因为它们与 List 无关。赞Creating objects dynamically in loop

【问题讨论】:

  • 你不能那样做。你不想要动态对象,你想要动态变量。
  • 您能否edit 为您的问题提供完整的minimal reproducible example?听起来 SelectMany()ToList() 可能会完成这项工作。
  • 在我看来,您可能需要的是Dictionary&lt;string, List&lt;MyClass&gt;&gt; 或类似的东西。关键是您用来访问该名称的列表并将您的类添加到其中。显然,如果两个人的名字相同,您还需要找到一种方法来防止出现问题,但希望这能给您足够的提示,为您指明正确的方向......
  • 您是希望表中的每一行都有一个 MyClass 实例,还是希望每一行都有一个 MyClass 的实际列表?如果你想要 List 那么应该如何从表中的一行创建 MyClass 的每个实例?听起来你最后可能想要 List>。

标签: c#


【解决方案1】:

您可以创建一个类,例如LISTOFNAMES 可以有一个公共成员 names[] 作为

的数组
          List <MyClass> 

类型。数组的大小可以传递为 LISTOFNAMES(..) 的构造函数和您的代码中的整数变量 您可以将每个名称[i] 实例化为一个单独的列表。 以下示例代码显示了所描述的方式

     // Add a public class LISTOFNAMES

       public class LISTOFNAMES
       {
        public List<MyClass>[] names;
        public LISTOFNAMES(int arsize)
        {
             this.names=new List<MyClass>[arsize];
        }
       }

然后在您的代码中,您必须首先实例化一个 LISTOFNAMES 类型的对象(假设您已经获得了数组 names[index] 所需的元素数量),然后您必须分别实例化每个 names[index] 以属于

       List <MyClass> 

类型。 因此,您可以添加以下行

       //in your code
       //suppose you have got a value for the number of names[] items say
      // to be named nn (of type int), then you add the following

       LISTOFNAMES lista=new LISTOFNAMES(nn);
       // Then you add..
       for(int i=0;i<nn;i++)
       {
          lista.names[i]=new List<MyClass>();
       }
       //Now you can use individually the lista.names[index] objects,
      // for example like
       lista.names[0].Add(new MyClass(...));
       lista.names[1].Add(new MyClass(...));

       etc

或者,您可以简单地实例化类型为数组的对象

      List<MyClass>[]

然后分别实例化每个项目。例如,已获得数组大小 “ar_size”是一个 int 变量,例如

                 int ar_size=table.Rows.Count;

你可以使用以下

          List<MyClass>[] names=new List<MyClass>[ar_size];
          for(int i=0;i<ar_size;i++)
             {
                names[i]=new List<MyClass>();
             }

然后填充每个对象的名称[index],如下所示

            names[0].Add(new MyClass(...));
            names[1].Add(new MyClass(...));

       etc.

希望这些帮助。

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 2011-07-02
    • 2010-10-25
    • 2011-04-29
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    相关资源
    最近更新 更多