【问题标题】:Copying the Generic List复制通用列表
【发布时间】:2015-07-15 10:37:09
【问题描述】:

我有 2 个通用列表,例如:

public class List1
{
    public string Tag { get; set; }
    public byte[] Resim1 { get; set; }
    public byte[] Resim2 { get; set; }
}

public class List2
{
    public string Tag { get; set; }
    public byte[] Resim { get; set; }
}

我需要将list1的项目一个一个复制到list2

例如list1 项目是:

Tag = 1 
Resim1 = cıvata
Resim2 = somun
Tag = 2 
Resim1 = vida,
Resim2 = tornavida

我需要将这些项目复制到list2 喜欢

Tag = 1
Resim =cıvata
Tag = 1 
Resim = Somun
Tag = 2 
Resim = vida
Tag = 2 
Resim = tornavida

知道怎么做吗?

【问题讨论】:

  • 为了澄清一下,list1 和 list2 对象是否存储在集合中?
  • list2 为空。就像我说的我需要将 list1 项目复制到 list2
  • Txtspk 不太可能让你在 Stackoverflow 上获得任何粉丝...
  • 你如何将字符串放入Resim,即byte[]

标签: c# generic-list


【解决方案1】:

看起来您想将 Resim1、Resim2 byte[] 拆分为 List2 类型的单个实例,但保留关联的 Tag?如果是这样,这将起作用:

设置

        var lst1 = new List<List1>
        {
            new List1
            {
                Tag = "1", 
                Resim1 = Encoding.ASCII.GetBytes("cıvata"),
                Resim2 = Encoding.ASCII.GetBytes("somun")
            },
            new List1
            {
                Tag = "2", 
                Resim1 = Encoding.ASCII.GetBytes("vida"),
                Resim2 = Encoding.ASCII.GetBytes("tornavida")
            },
        };

然后:

        var list2Collection = new List<List2>();

        foreach (var item in lst1)
        {
            list2Collection.Add(new List2{ Tag = item.Tag, Resim = item.Resim1});
            list2Collection.Add(new List2 { Tag = item.Tag, Resim = item.Resim2 });
        }

【讨论】:

    【解决方案2】:

    不清楚你想做什么,但如果你想从现有的 List1 对象集合中填充 List2 对象的集合,这里有一种方法(使用 Linq):

    // List<List1> list1Coll = new List<List1>();
    // list1Coll.Add( .... )            
    
    List<List2> list2Coll = list1Coll.Select(o => new List2() { Tag = o.Tag, Resim = o.Resim1 }).ToList();
    

    【讨论】:

      【解决方案3】:

      很难看出你想做什么。我假设您正在制作两个列表,一个以您的 list1 作为项目,一个以您的 list2 作为项目的空列表,例如:

              List<List1> list1 = new List<List1>();
              List<List2> list2 = new List<List2>();
      

      这很令人困惑,因为您的列表类不是列表,而是一个项目。尽管如此,有很多方法可以将您的第一个列表的项目添加到您的第二个列表中,最简单的就是迭代地添加它们,例如:

      foreach (List1 item in list1)
              {
                  if (item.Resim1 != null)
                      list2.Add(new List2() { Tag = item.Tag, Resim = item.Resim1 });
                  if (item.Resim2 != null)
                      list2.Add(new List2() { Tag = item.Tag, Resim = item.Resim2 });
              }
      

      请记住,您的标签不会成为您的索引,您必须将您提供的示例值从字符串转换为字节[]。

      【讨论】:

        【解决方案4】:

        首先纠正你对通用列表的概念

        执行以下操作

        public class YourClassName1
        {
            public string Tag { get; set; }
            public byte[] Resim1 { get; set; }
            public byte[] Resim2 { get; set; }
        } 
        
        public class YourClassName2
        {
            public string Tag { get; set; }
            public byte[] Resim { get; set; }
        } 
        

        现在您可以将新的通用列表设为

        var list1 = new List<YourClassName1>();
        var list2 = new List<YourClassName2>();
        

        现在将输入后的数据混合为

        foreach(var item in list1)
        {
          list2.Add(new YourClassName2{Tag = item.Tag, Resim = item.Resim1});
          list2.Add(new YourClassName2{Tag = item.Tag, Resim = item.Resim2});
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-09
          • 1970-01-01
          • 2020-06-04
          • 1970-01-01
          • 2010-12-15
          • 2022-07-20
          • 2015-04-25
          • 1970-01-01
          相关资源
          最近更新 更多