-1

我如何转换

public class MyCustomList: List<MyCustomList>

下单后返回MyCustomList

myCustomListObject = myCustomListObject.OrderBy(...);

我试过.ToList() as myCustomListObject哪个返回null。我该怎么办?

4

4 回答 4

2

问题是 ToList() 将返回一个列表。您不能将它转换为 MyCustomList ,就像您不能将另一个对象转换为某些它不是的东西一样。

List<string> result = myCustomListObject.OrderBy(...).ToList();

如果你真的需要一个 MyCustomListObject ,你应该创建一个接受显式转换操作的构造函数。

如果 MyCustomList 只是 List<string> 的另一个名称,您可以使用:

using MyCustomList = List<string>;

然后它会像你想要的那样工作。

于 2012-08-26T17:19:48.997 回答
2
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调用会有一些好处,就像对列表进行就地排序一样。SortOrderBySort

于 2012-08-26T19:32:13.847 回答
1

简单的返回值OrderBy不是 的实例MyCustomList,也不是 的返回值ToList。因此,您不能将其转换为MyCustomList.

您唯一的选择是:

  • 您创建 的新实例MyCustomList并添加OrderBy.
  • 您将MyCustomList实例的当前内容替换为OrderBy.

如果不知道更多关于你的MyCustomList班级,就不可能说出更多。但是,由于它继承自List<MyCustomList>,因此可以假设上述两个选项都是可行的。

于 2012-08-26T17:14:01.783 回答
1

我同意 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()扩展方法显示内容和类型名称。

于 2012-08-26T17:20:08.637 回答