为什么IEnumerable .Select()在2种情况中有1种工作? 无法从使用中推断出来
我收到此错误消息:
The type arguments for method 'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable, System.Func)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
第一种方法使用IEnumerable.Select()
没有问题? 第二种方法的问题在哪里?
private void GetPupilsForSchoolclass() { ObservableCollection pupilsOC = new ObservableCollection ( _adminRepo.GetPupilsBySchoolclassId(_selectedSchoolclass.SchoolclassId).Select(p => new PupilViewModel(p, _adminRepo)) ); SelectedSchoolclass.PupilListViewModel = pupilsOC; } private void GetDocumentsForPupil() { ObservableCollection documentsOC = new ObservableCollection(); IEnumerable documents = _docRepo.GetDocumentsByPupilId(_selectedPupil.Id); documents.Select(doc => documentsOC.Add(doc)); SelectedPupil.Documents.DocumentList = documentsOC; }
documentsOC.Add
返回void
。
写作没有任何意义(并且是不可能的)。选择.Select
。
你想要做的事情首先不能起作用; Select
是惰性的,在枚举结果之前不会调用您的函数。
你应该使用常规的foreach
循环。
我怀疑 Add
返回void
– 是吗? 如果是这样,则无法将其投影到Func<,>
– 仅限于Action
– 并且Select
想要Func<,>
。
Select
与间接的’foreach不同
当您从集合中选择一个Items时,Error似乎缺少Return语句。
例:
collection = nonLabors.Select(item => { item.Travel_Miles = item.Travel_Miles_Original != null ? decimal.Parse(item.Travel_Miles_Original) : 0; return item; }).ToList();
ObservableCollection
的返回类型是什么? 通常, Add
方法返回void。 你不能使用LINQ Select
为所有元素执行一个过程,只有一个返回一些东西的函数(否则Select
的返回值来自哪里?)。 相反,您可以使用LINQ ForEach
或C#foreach循环。
选择不是 foreach的替代品。 改为使用它:
上述就是C#学习教程:为什么IEnumerable .Select()在2种情况中有1种工作? 无法从使用中推断出来分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
ObservableCollection documentsOC = new ObservableCollection (); IEnumerable documents = _docRepo.GetDocumentsByPupilId(_selectedPupil.Id); foreach(var doc in documents) { documentsOC.Add(doc); } SelectedPupil.Documents.DocumentList = documentsOC;
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/983934.html