IList 不包含定义 <linq 函数>

jue*_*n d 10 c# linq

我有一个IList

IList list = GetList();
Run Code Online (Sandbox Code Playgroud)

并想在其上使用 Linq 函数,例如FirstOrDefault()orWhere()但它说:

IList 不包含 [linq 函数] 的定义

我究竟做错了什么?

Tim*_*ter 9

如果您的集合未实现通用接口,您可以使用CastOfType(Cast + Filter) 扩展方法。

IList list = GetList();
string first = list.Cast<string>().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

您可以将这些方法与任何实现IEnumerable. 当然,只有当列表确实包含字符串时它才有效。如果它可以包含您可以使用的任何内容:

string first = list.Cast<Object>().Select(obj => obj?.ToString() ?? "").FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

如果您只想要字符串对象,可以OfType如上所述使用:

string first = list.OfType<string>().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)


jue*_*n d 6

确保您将泛型 IList与您使用的类型一起使用,如下所示

IList<string> list = GetList();
Run Code Online (Sandbox Code Playgroud)

然后您可以使用该列表上的 LINQ 函数。

  • 如果您*确实*从非泛型集合开始,那么 `Cast&lt;T&gt;()` 和 `OfType&lt;T&gt;()` 就是您的朋友。 (4认同)