我想我对我看到的几行代码感到有些困惑。
第一个:
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)
创建了一个 lambda 表达式并调用
Enumerable.OrderBy<TSource, TKey> Method (IEnumerable<TSource>, Func<TSource, TKey>)
存在
和IEnumerable<TSource>
存在是从查询语句创建的 lambda 表达式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 只需要一个由其接口定义的函数(它接受两个项目并返回一个 int)。但是,计算机如何知道在幕后给委托赋予什么函数名呢?还是接口实际上并不关心函数的名称?