gpt4 book ai didi

c# - 为什么我不能在实现 IEnumerable 的类上使用 LINQ 方法?

转载 作者:行者123 更新时间:2023-11-30 14:37:46 25 4
gpt4 key购买 nike

我必须完成一个项目,但我有一个简单的问题

我有一个这样定义的类

using System;
using System.Collections;
using System.Collections.Generic;

..

public class GroupId: XmlDataTransferObject, IEnumerable
{
private IList _groupId;
private string _nameId;

public GroupId() : this("GroupId", "Id")
{
}

public GroupId(string rootName, string nomeId) : base(rootName)
{
_groupId = new ArrayList();
_nomeId = nomeId;
}

public override bool IsNull
{
get { return _groupId.Count == 0; }
}

public int Count
{
get { return _groupId.Count; }
}

public int Add(Intero i)
{
return _groupId.Add(i);
}

public Intero this[int index]
{
get { return (Intero)_groupId[index]; }
set { _groupId[index] = value; }
}
...

public IEnumerator GetEnumerator()
{
return _groupId.GetEnumerator();
}
}

我需要找到两个 GroupId 对象的实例之间的交集。

为什么我在可用方法中看不到 Linq Intersect,即使我已经声明了语句:

Using System.Linq 

...

var x = _groupId1.Intersect(_groupId2);

...

Error 1 '....GroupId' does not contain a definition for 'Intersect' and no extension method 'Intersect' accepting a first argument of type '...GroupId' could be found (are you missing a using directive or an assembly reference?)

最佳答案

你的 GroupId类仅实现非泛型 IEnumerable类 - 你应该实现 IEnumerable<T>如果您想使用 LINQ 扩展方法。 (无论如何,这通常会是更好的体验。)

请注意,如果您使用通用的 IList<T>,这也会更容易而不是非通用 IList - 基本上尽量避免在新代码中完全使用非泛型集合,如果可能的话。

可以使用Cast转换你的 IEnumerableIEnumerable<T>像这样:

var x = _groupId1.Cast<Intero>().Intersect(_groupId2.Cast<Intero>());

...但是让你的类实现 IEnumerable<Intero> 会更好.

关于c# - 为什么我不能在实现 IEnumerable 的类上使用 LINQ 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8893395/

25 4 0