【发布时间】:2020-06-02 18:01:16
【问题描述】:
我有一个方法
AddOrUpdateList(this List<T> list, T scope, Func<T, bool>, Func<T, bool> when = null){
T item = default;
if (when == null)
list.SingleOrDefault(t => t.Equals(scope)); //Check Single
else
item = list.SingleOrDefault(when);
.
.
.
}
当我要使用它时,我有两个可能的开始:
- 我收到一个
element,其中element.Title是什么东西,所以我使用Title作为过滤器 - 我收到了一个没有标题的
element,所以我需要从列表中获取最后一个
我正在考虑使用三元运算符和 lambda 来创建一个考虑这两种情况的过滤器。
我想出的是:
var filter = (element.Title != "")
? (Func<T, bool>)(e => e.Title == element.Title)
: (Func<T, bool>)(e = list.Select(ele => ele).Last());
但这给了我:Error CS0030 Cannot convert type 'T' to 'System.Func<T, bool>'
您有什么想法或帮助可以给我吗??
我对 C# 和 Linq 很陌生,所以我不太了解某些事情应该如何工作
提前致谢。
【问题讨论】:
-
e = list-- 你的意思是e => list。那说list.Select(ele => ele).Last()毫无意义:为什么不做list.Last()(假设list是一个布尔集合?) -
list 是一种类型的对象列表
-
... 那是
bool的一种吗?现在,我无法弄清楚你想要做什么。 -
我有一种方法可以使用元素的标题作为过滤器来添加或更新现有元素。但是我有一些没有标题的元素,所以它们必须更新列表中的最后一个元素