【问题标题】:Adding more than one class list into one class list将一个以上的班级列表添加到一个班级列表中
【发布时间】:2019-05-14 05:33:20
【问题描述】:

我必须将多个列表加入一个列表。这个问题似乎很常见,但我的问题可能完全不同。 因为,我有 3 节课。我根据这些类创建了 3 个列表

List<QTM> lstQTM = new List<QTM>();
List<QTMMain> lstQTMmain = new List<QTMMain>();
List<QTMStats> lstQTMStats = new List<QTMStats>();

这些类仅表示存储在该列表中的属性。 我创建了另一个列表

 List<QTMList> lstQTMlist = new List<QTMList>();

这个 QTMList 也是一个类。这个类有

public class QTMList{
        public List<QTM> QTM { get; set; }
        public List<QTMStats> QTMStats { get; set; }
        public List<QTMMain> QTMMain { get; set; }
}

现在我尝试将 lstQTM、lstQTMmain 和 lstQTMStats 添加到 lstQTMlist 列表中。所以我用了

qtmList = new QTMList();
qtmList.QTMMain(lstQTMmain);
qtmList.QTM(lstQTM);
qtmList.QTMStats(lstQTMStats);

lstQTMlist.Add(qtmList);

我得到的错误是

C# 不可调用的“lstQTMlist.lstQTMmain”成员不能像 方法

等等。

你能请任何人给我任何提示来解决我的问题吗?

【问题讨论】:

  • 所有列表的长度是否相同?
  • @TheGeneral 不,先生,这些长度不同
  • 您可以直接使用它:qtmList.QTMMain = lstQTMmain; 还是必须克隆它(取消引用它/创建重复值)?或者将新值添加到已经存在的集合中?
  • @Jimi 是正确的,我无法添加任何内容。
  • 这条消息告诉你你需要知道的一切......你把它当作一个方法来调用,但它不是一个方法......qtmList.QTM(lstQTM);这不是有效的c#......你的其他电话也

标签: c# list add


【解决方案1】:

您应该使用设置。

qtmList = new QTMList();
qtmList.QTMMain=lstQTMmain;
qtmList.QTM=lstQTM;
qtmList.QTMStats=lstQTMStats;

【讨论】:

  • 您能否解释一下为什么您的解决方案适用于 OP,以帮助澄清他们的解决方案为何不起作用;它会增加价值。
【解决方案2】:

你不能像方法一样调用属性,信息很清楚。

qtmList = new QTMList();

您不能这样做,例如: qtmList.QTMMain(lstQTMmain);

您可以像这样将1stQtMain 添加到QTMMain

qtmList.QTMMain.AddRange(lstQTMmain)

您使用AddRange 将对象列表添加到列表中。

【讨论】:

    【解决方案3】:

    该错误是由您使用 QTMList 类的字段的方式引起的。您正在使用 它们就像是方法一样,即在括号内传递参数。这就是你调用方法的方式。 为了给类的字段或属性赋值,您只需使用= 运算符。 因此,您的代码可以简化为:

    qtmList = new QTMList();
    qtmList.QTMMain = new List<QTMMain>();
    qtmList.QTM = new List<QTM>();
    qtmList.QTMStats = new List<QTMStats>();
    

    或者您可以在 QTMList 初始化时初始化列表:

    public class QTMList{
        public List<QTM> QTM { get; set; } = new List<QTM>();
        public List<QTMStats> QTMStats { get; set; } = new List<QTMStats>();
        public List<QTMMain> QTMMain { get; set; } = new List<QTMMain>();
    }
    

    【讨论】:

    • 球赛有点晚了...但是你是对的有点,将这些列表分配给用户拥有的东西怎么样?
    【解决方案4】:

    你可以试试这个:

    qtmList = new QTMList();
    qtmList.QTMMain = new List<QTMStats>(lstQTMmain);
    qtmList.QTM = new List<QTM>(lstQTM);
    qtmList.QTMStats = new List<QTMMain>(lstQTMStats);
    

    通过这样做,新列表 (QTMMain, ...) 包含已分配列表 (lstQTMmain, ...) 的项目的副本。您可以通过将以下构造函数添加到 QTMList 来简化代码:

    public QTMList(List<QTM> qtm, List<QTMStats> qtmstats, qtmmain)
    {
        QTMMain = new List<QTMStats>(lstQTMmain);
        QTM = new List<QTM>(lstQTM);
        QTMStats = new List<QTMMain>(lstQTMStats);
    }
    

    如果您不想要列表内容的副本,则应将列表分配给属性。

    qtmList = new QTMList();
    qtmList.QTMMain = lstQTMmain;
    qtmList.QTM = lstQTM;
    qtmList.QTMStats = lstQTMStats;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      相关资源
      最近更新 更多