急急,两个List之间赋值方法

时间:2021-06-11 13:58:03
有两个List,list1和list2,数据类型都是一个DTO类
想要把list2与list1相同属性的值赋给list1
如何写啊?循环一条条的赋值吗?

还有怎样提出一个共通的方法啊?

求高手门帮帮我这个新手吧。。。谢谢了

21 个解决方案

#1


可以在你的DTO里定义一个clone()方法

        public LineEntity Clone()
        {
            // シリアル化した内容を保持しておくためのMemoryStreamを作成
            using (MemoryStream stream = new MemoryStream())
            {
                // バイナリシリアル化を行うためのフォーマッタを作成
                BinaryFormatter f = new BinaryFormatter();

                // 現在のインスタンスをシリアル化してMemoryStreamに格納
                f.Serialize(stream, this);

                // ストリームの位置を先頭に戻す
                stream.Position = 0L;

                // MemoryStreamに格納されている内容を逆シリアル化する
                return (LineEntity)f.Deserialize(stream);

            }

        }
DTOClass上面加上

    [Serializable]

#2


LIST1=LIST2  

#3


如果DTO中没有复杂对象的话
定义一个clone方法

  public DTO1 Clone()
  {
    return (DTO1)MemberwiseClone();
  }

#4


要是循环该怎么写啊?

#5


foreach(DTO1 dto in list1)
{
list2 = new List<DTO1>();
list2.Add(dto.Clone());
}

#6


list2 = new List<DTO1>();
foreach(DTO1 dto in list1)
{
list2.Add(dto.Clone());
}

#7


2
引用 6 楼 kong19 的回复:
list2 = new List<DTO1>();
foreach(DTO1 dto in list1)
{
list2.Add(dto.Clone());
}

2个list的DTO不一样  不能这么add啊

#8


引用 6 楼 kong19 的回复:
list2 = new List<DTO1>();
foreach(DTO1 dto in list1)
{
list2.Add(dto.Clone());
}

2个list的DTO不一样  不能这么add啊

#9


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var list1 = new List<string>() { "a", "b", "c", "d" };
            var list2 = new List<string>() { "c", "d", "e", "f" };
            list1 = list1.Intersect(list2).ToList();
            Console.WriteLine(string.Join(", ", list1));
        }
    }
}

// result is "c", "d".

#10


引用楼主 bl525lb 的回复:
有两个List,list1和list2,数据类型都是一个DTO类
想要把list2与list1相同属性的值赋给list1
如何写啊?循环一条条的赋值吗?

还有怎样提出一个共通的方法啊?

求高手门帮帮我这个新手吧。。。谢谢了


以为是同一个DTO

#11


引用 10 楼 kong19 的回复:
以为是同一个DTO
那怎么写呢

#12



List<DTO2> listTemp;
foreach(DTO1 dto in list1)
{
listTemp = list2.Where(o=>o.id.Equals(dto.id)).Select(o=>o).ToList();
foreach(PropertyInfo pi in dto.GetType().GetProperties())
{
pi.Name 
foreach(PropertyInfo pi2 in listTemp)
{
if(pi2.Name.Equals(pi.Name))
{
pi.SetValue(pi2.GetValue(null,null));

}
}
}

没有测试。你试试吧

#13


List<DTO2> listTemp;
foreach(DTO1 dto in list1)
{
listTemp = list2.Where(o=>o.id.Equals(dto.id)).Select(o=>o).ToList();
foreach(PropertyInfo pi in dto.GetType().GetProperties())

foreach(PropertyInfo pi2 in listTemp)
{
if(pi2.Name.Equals(pi.Name))
{
pi.SetValue(pi2.GetValue(null,null));
}  
}
}
}

#14


急急,两个List之间赋值方法

#15


dto.id用你DTO里面类似key的东西代替一下

#16


还是挨个赋值吧,刚才的代码有问题。

#17


引用 3 楼 kong19 的回复:
如果DTO中没有复杂对象的话
定义一个clone方法

  public DTO1 Clone()
  {
    return (DTO1)MemberwiseClone();
  }
根据需求可能需要循环赋值

#18


该回复于2012-02-03 11:06:19被版主删除

#19


引用 17 楼 woshizou 的回复:
引用 3 楼 kong19 的回复:

如果DTO中没有复杂对象的话
定义一个clone方法

public DTO1 Clone()
{
return (DTO1)MemberwiseClone();
}
根据需求可能需要循环赋值

for和foreach都应该怎么写啊?

#20


List<string> t = new List<string>(); 
List<string> t2 = new List<string>(t.ToArray()); 

#21



public class UserCopy
{
    public class LoginEntity
    {
        public string UserName { get; set; }
        public string UserPwd { get; set; }
        public DateTime ActiveTime { get; set; }
    }
    public class UserEntity : LoginEntity
    {
        public string UserID { get; set; }
        public Int16 UserSex { get; set; }
        public Int32 UserAge { get; set; }
    }
    protected void UserCopy()
    {
        List<UserEntity> ueList = new List<UserEntity>() { 
            new UserEntity(){
            UserID="U1",
            UserName="U1",
            UserPwd="U1PWD",
            ActiveTime=DateTime.Now
            },
            new UserEntity(){
            UserID="U2",
            UserName="U2",
            UserPwd="U2PWD",
            ActiveTime=DateTime.Now},
            new UserEntity(){
            UserID="U2",
            UserName="U2",
            UserPwd="U2PWD",
            ActiveTime=DateTime.Now}
            };
        List<LoginEntity> leList = new List<LoginEntity>();
        //方法一:遍历
        ueList.ForEach(ue => leList.Add(new LoginEntity()
        {
            UserName = ue.UserName,
            UserPwd = ue.UserPwd,
            ActiveTime = ue.ActiveTime
        }));
    }
}

#1


可以在你的DTO里定义一个clone()方法

        public LineEntity Clone()
        {
            // シリアル化した内容を保持しておくためのMemoryStreamを作成
            using (MemoryStream stream = new MemoryStream())
            {
                // バイナリシリアル化を行うためのフォーマッタを作成
                BinaryFormatter f = new BinaryFormatter();

                // 現在のインスタンスをシリアル化してMemoryStreamに格納
                f.Serialize(stream, this);

                // ストリームの位置を先頭に戻す
                stream.Position = 0L;

                // MemoryStreamに格納されている内容を逆シリアル化する
                return (LineEntity)f.Deserialize(stream);

            }

        }
DTOClass上面加上

    [Serializable]

#2


LIST1=LIST2  

#3


如果DTO中没有复杂对象的话
定义一个clone方法

  public DTO1 Clone()
  {
    return (DTO1)MemberwiseClone();
  }

#4


要是循环该怎么写啊?

#5


foreach(DTO1 dto in list1)
{
list2 = new List<DTO1>();
list2.Add(dto.Clone());
}

#6


list2 = new List<DTO1>();
foreach(DTO1 dto in list1)
{
list2.Add(dto.Clone());
}

#7


2
引用 6 楼 kong19 的回复:
list2 = new List<DTO1>();
foreach(DTO1 dto in list1)
{
list2.Add(dto.Clone());
}

2个list的DTO不一样  不能这么add啊

#8


引用 6 楼 kong19 的回复:
list2 = new List<DTO1>();
foreach(DTO1 dto in list1)
{
list2.Add(dto.Clone());
}

2个list的DTO不一样  不能这么add啊

#9


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var list1 = new List<string>() { "a", "b", "c", "d" };
            var list2 = new List<string>() { "c", "d", "e", "f" };
            list1 = list1.Intersect(list2).ToList();
            Console.WriteLine(string.Join(", ", list1));
        }
    }
}

// result is "c", "d".

#10


引用楼主 bl525lb 的回复:
有两个List,list1和list2,数据类型都是一个DTO类
想要把list2与list1相同属性的值赋给list1
如何写啊?循环一条条的赋值吗?

还有怎样提出一个共通的方法啊?

求高手门帮帮我这个新手吧。。。谢谢了


以为是同一个DTO

#11


引用 10 楼 kong19 的回复:
以为是同一个DTO
那怎么写呢

#12



List<DTO2> listTemp;
foreach(DTO1 dto in list1)
{
listTemp = list2.Where(o=>o.id.Equals(dto.id)).Select(o=>o).ToList();
foreach(PropertyInfo pi in dto.GetType().GetProperties())
{
pi.Name 
foreach(PropertyInfo pi2 in listTemp)
{
if(pi2.Name.Equals(pi.Name))
{
pi.SetValue(pi2.GetValue(null,null));

}
}
}

没有测试。你试试吧

#13


List<DTO2> listTemp;
foreach(DTO1 dto in list1)
{
listTemp = list2.Where(o=>o.id.Equals(dto.id)).Select(o=>o).ToList();
foreach(PropertyInfo pi in dto.GetType().GetProperties())

foreach(PropertyInfo pi2 in listTemp)
{
if(pi2.Name.Equals(pi.Name))
{
pi.SetValue(pi2.GetValue(null,null));
}  
}
}
}

#14


急急,两个List之间赋值方法

#15


dto.id用你DTO里面类似key的东西代替一下

#16


还是挨个赋值吧,刚才的代码有问题。

#17


引用 3 楼 kong19 的回复:
如果DTO中没有复杂对象的话
定义一个clone方法

  public DTO1 Clone()
  {
    return (DTO1)MemberwiseClone();
  }
根据需求可能需要循环赋值

#18


该回复于2012-02-03 11:06:19被版主删除

#19


引用 17 楼 woshizou 的回复:
引用 3 楼 kong19 的回复:

如果DTO中没有复杂对象的话
定义一个clone方法

public DTO1 Clone()
{
return (DTO1)MemberwiseClone();
}
根据需求可能需要循环赋值

for和foreach都应该怎么写啊?

#20


List<string> t = new List<string>(); 
List<string> t2 = new List<string>(t.ToArray()); 

#21



public class UserCopy
{
    public class LoginEntity
    {
        public string UserName { get; set; }
        public string UserPwd { get; set; }
        public DateTime ActiveTime { get; set; }
    }
    public class UserEntity : LoginEntity
    {
        public string UserID { get; set; }
        public Int16 UserSex { get; set; }
        public Int32 UserAge { get; set; }
    }
    protected void UserCopy()
    {
        List<UserEntity> ueList = new List<UserEntity>() { 
            new UserEntity(){
            UserID="U1",
            UserName="U1",
            UserPwd="U1PWD",
            ActiveTime=DateTime.Now
            },
            new UserEntity(){
            UserID="U2",
            UserName="U2",
            UserPwd="U2PWD",
            ActiveTime=DateTime.Now},
            new UserEntity(){
            UserID="U2",
            UserName="U2",
            UserPwd="U2PWD",
            ActiveTime=DateTime.Now}
            };
        List<LoginEntity> leList = new List<LoginEntity>();
        //方法一:遍历
        ueList.ForEach(ue => leList.Add(new LoginEntity()
        {
            UserName = ue.UserName,
            UserPwd = ue.UserPwd,
            ActiveTime = ue.ActiveTime
        }));
    }
}