将列表复制到另一个列表,但不包括列表类型的某些属性

3
这似乎应该很容易,但我无法找到一个简洁的方法来完成它。
使用这个类:
class SomeType
{ 
   public int SomeInteger {get;}
   public string SomeString {get;}
   public object SomeObject {get;}
}

假设从某个地方检索到一个SomeType列表,但是我需要从每个项中删除SomeString字段。因此,我遍历列表,创建一个匿名类型并将其添加到新列表中。

List<SomeType> list = GetList();

var newList = new List<dynamic>();
list.ForEach(item => newList.Add(new { SomeInteger = item.SomeInteger, SomeObject = item.SomeObject });

有没有更好的方法可以避免我创建一个类型为dynamic的空列表?我可能说得不对,但感觉这不是最好的做法。


可能是如何从泛型List<T>中获取T的类型的重复问题。 - MethodMan
2个回答

8

您可以直接创建一个匿名类型列表,这样就可以强类型化:

list.Select(item => new 
                    { 
                        SomeInteger = item.SomeInteger, 
                        SomeObject = item.SomeObject
                    }).ToList();

谢谢,我知道一定有更好的方法! - Thomas Wormald

3
你不需要额外的声明语句来声明newList。C#编译器可以自动地确定类型。更多细节请参见隐式类型局部变量
 var newList = GetList()
  .Select(x => new { SomeInteger = x.SomeInteger, SomeObject = x.SomeObject})
  .ToList();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接