私が見た数行のコードに少し混乱していると思います。
最初の1つ:
IEnumerable<SignalViewModel> SelectionQuery =
from SignalViewModel svm in AvailableSignalsListView.SelectedItems
orderby AvailableSignalsListView.Items.IndexOf(svm)
select svm;
_GraphViewerViewModel.SelectAvailableSignals(SelectionQuery);
orderby がここで定義されているので、私には理にかなっています: http://msdn.microsoft.com/en-us/library/bb534966%28v=vs.110%29.aspx
ソースとキーセレクターを取ります。クエリ部分 orderbyAvailableSignalsListView.Items.IndexOf(svm)
がラムダ式を作成して呼び出すと推測しています
Enumerable.OrderBy<TSource, TKey> Method (IEnumerable<TSource>, Func<TSource, TKey>)
IEnumerable<TSource>
beingとbeing はAvailableSignalsListView.SelectedItems
、Func<TSource, TKey>
次の行に沿ってクエリ ステートメントから作成されたラムダ式です。
svm => AvailableSignalsListView.Items.IndexOf(svm);
詳細についての私の理解が正しいかどうかはわかりませんが、これは私には理にかなっています。
二つ目、
List<SignalViewModel> mySelectedItems = new List<SignalViewModel>();
//sort version
foreach (SignalViewModel svm in AvailableSignalsListView.SelectedItems)
{
mySelectedItems.Add(svm);
}
mySelectedItems.Sort((x,y) => AvailableSignalsListView.Items.IndexOf(x).CompareTo(AvailableSignalsListView.Items.IndexOf(y)));
sort は icomparer を使用するため意味がありません。icomparer が必要とするのは、そのインターフェイスで定義された関数 (2 つの項目を取り、int を返す) だけであることは認められます。しかし、コンピュータはどのようにして、舞台裏でデリゲートに与える関数名を知るのでしょうか? または、インターフェイスは実際に関数の名前を気にしませんか?