我如何转换
public class MyCustomList: List<MyCustomList>
下单后返回MyCustomList
?
myCustomListObject = myCustomListObject.OrderBy(...);
我试过.ToList() as myCustomListObject
哪个返回null。我该怎么办?
我如何转换
public class MyCustomList: List<MyCustomList>
下单后返回MyCustomList
?
myCustomListObject = myCustomListObject.OrderBy(...);
我试过.ToList() as myCustomListObject
哪个返回null。我该怎么办?
问题是 ToList() 将返回一个列表。您不能将它转换为 MyCustomList ,就像您不能将另一个对象转换为某些它不是的东西一样。
List<string> result = myCustomListObject.OrderBy(...).ToList();
如果你真的需要一个 MyCustomListObject ,你应该创建一个接受显式转换操作的构造函数。
如果 MyCustomList 只是 List<string> 的另一个名称,您可以使用:
using MyCustomList = List<string>;
然后它会像你想要的那样工作。
public class MyCustomList: List<MyCustomList>
{
//stuff you already have here, including your current constructors
public MyCustomList(IEnumerable<MyCustomList> source)
{
//something here that (perhaps after using `this` to call
//one of the existing constructors, loads all of the items
//in source into it. There may be optimisations available
//in particular cases, as a bonus.
}
}
如果您真的希望能够做类似ToList()
样式的事情,那么您可以添加:
public static class MyBigOClassOHelpfulStaticMethods //maybe pick a better name
{
public static MyCustomList ToMyCustomList(this IEnumerable<MyCustomList> source)
{
return new MyCustomList(source);
}
}
这与ToList()
工作原理相去甚远。
尽管如此,如果你要经常用新的重写第一个,那么调用而不是MyCustomList
调用会有一些好处,就像对列表进行就地排序一样。Sort
OrderBy
Sort
简单的返回值OrderBy
不是 的实例MyCustomList
,也不是 的返回值ToList
。因此,您不能将其转换为MyCustomList
.
您唯一的选择是:
MyCustomList
并添加OrderBy
.MyCustomList
实例的当前内容替换为OrderBy
.如果不知道更多关于你的MyCustomList
班级,就不可能说出更多。但是,由于它继承自List<MyCustomList>
,因此可以假设上述两个选项都是可行的。
我同意 OR Mapper 的观点,在不了解 MyCustomList 的情况下很难回答。但是你可以做一些像这样简单的事情(同样,在不知道更多的情况下,这现在可能有效):
void Main()
{
var list = new MyList() { new Stuff() { ugg = "z" }, new Stuff() { ugg = "b" } };
var myOrderedList = list.OrderBy(s => s.ugg);
myOrderedList.ToList().Dump();
var list2 = new MyList();
list2.AddRange(myOrderedList);
list2.GetType().Name.Dump();
}
public class Stuff{
public string ugg {get;set;}
}
// Define other methods and classes here
public class MyList : List<Stuff>{
}
我使用 LinqPad 使用Dump()
扩展方法显示内容和类型名称。