当我内部的对象是继承我的基类的类时,我试图创建一个基类列表。我是最快的语法。
我有以下课程
public class ObjectA : BaseObject
{
public string ObjectAName {get;set;}
}
我的方法是:
private List<BaseObject> GetList()
{
List<ObjectA> aList = MyData.ObjectA.FindAll(delegate(ObjectA my) { return my.ObjectAName == "Harold"; });
List<BaseObject> baseList = new List<BaseObject>();
foreach(ObjectA obj in aList)
{
baseList.Add(obj);
}
return baseList;
}
是否有更直接的linq语法?
答案 0 :(得分:4)
也许是这样的。
baseList.AddRange(MyData.ObjectA.Where(o=>o.ObjectAName == "Harold"));
或者你也可以这样做
private List<BaseObject> GetList()
{
return MyData.ObjectA.Where(o=>o.ObjectAName == "Harold").Cast<BaseObject>().ToList();
}
答案 1 :(得分:2)
怎么样:
private List<BaseObject> GetList()
{
return MyData.ObjectA
.FindAll(my => my.ObjectAName == "Harold")
.Cast<BaseObject>()
.ToList();
}
请注意,FindAll
只是List<T>
的实例方法,而不是LINQ的一部分。
答案 2 :(得分:0)
只需使用AddRange
private List<BaseObject> GetList()
{
List<ObjectA> aList = MyData.ObjectA.FindAll(delegate(ObjectA my) { return my.ObjectAName == "Harold"; });
List<BaseObject> baseList = new List<BaseObject>();
//foreach (ObjectA obj in aList)
//{
// baseList.Add(obj);
//}
baseList.AddRange(aList);
return baseList;
}
答案 3 :(得分:0)
如果从现有列表创建新列表,另一种方法是使用重载列表构造函数来获取IEnumerable:
private List<BaseObject> GetList()
{
List<ObjectA> aList = MyData.ObjectA.FindAll(delegate(ObjectA my) { return my.ObjectAName == "Harold"; });
List<BaseObject> baseList = new List<BaseObject>(aList.OfType<BaseObject>());
return baseList;
}
话虽如此,目前还不清楚为什么你真的需要一个新的列表,而不是返回一个过滤的IEnumerable,并且根本不需要两个列表中的额外内存指针。这就是为什么创造了产量。