変換方法
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を返すものを試しました。私は何をすべきか?
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
問題は、ToList() が List を返すことです。別のオブジェクトを変換できないのと同じように、それを MyCustomList に変換することはできません。
List<string> result = myCustomListObject.OrderBy(...).ToList();
本当に MyCustomListObject が必要な場合は、明示的なキャスト操作を受け入れるコンストラクターを作成する必要があります。
MyCustomList が List<string> の別の名前である場合は、次を使用できます。
using MyCustomList = List<string>;
その後、希望どおりに動作します。
の戻り値は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()
拡張メソッドを使用して内容と型名を表示します。