-1

変換方法

public class MyCustomList: List<MyCustomList>

MyCustomList注文後に戻る?

myCustomListObject = myCustomListObject.OrderBy(...);

.ToList() as myCustomListObjectnullを返すものを試しました。私は何をすべきか?

4

4 に答える 4

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 に答える
2

問題は、ToList() が List を返すことです。別のオブジェクトを変換できないのと同じように、それを MyCustomList に変換することはできません。

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

本当に MyCustomListObject が必要な場合は、明示的なキャスト操作を受け入れるコンストラクターを作成する必要があります。

MyCustomList が List<string> の別の名前である場合は、次を使用できます。

using MyCustomList = List<string>;

その後、希望どおりに動作します。

于 2012-08-26T17:19:48.997 に答える
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 に答える