C# 扩展方法即使在实现IEnumerable时也不显示

C# 扩展方法即使在实现IEnumerable时也不显示,c#,.net,linq,C#,.net,Linq,这是我的代码: class myClass : IEnumerable { public Dictionary<int, string> dctIdName = new Dictionary<int, string>(); public myClass() { for (int idx = 0; idx < 100; idx++) {

这是我的代码:

    class myClass : IEnumerable
    {
        public Dictionary<int, string> dctIdName = new Dictionary<int, string>();

        public myClass()
        {
            for (int idx = 0; idx < 100; idx++)
            {
                dctIdName.Add(idx, string.Format("Item{0}", idx));
            }

        }

        // IEnumerable Member
        public IEnumerator GetEnumerator()
        {
            foreach (object o in dctIdName)
            {
                yield return o;
            }
        }
    }
我包含的名称空间包括:

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;


如何修复此问题?

您需要实现IEnumerable的通用版本。我猜在你的情况下会是:

IEnumerable<KeyValuePair<int, string>>
IEnumerable

IEnumerable

您需要实现IEnumerable的通用版本。我猜在你的情况下会是:

IEnumerable<KeyValuePair<int, string>>
IEnumerable

IEnumerable
它确实有效。是
IEnumerable
上的扩展方法。但是大多数扩展方法都适用于
IEnumerable
。您的课程应该从以下内容开始:

class myClass : IEnumerable<SomeType>
例如,现在您可以调用。

它确实有效。是
IEnumerable
上的扩展方法。但是大多数扩展方法都适用于
IEnumerable
。您的课程应该从以下内容开始:

class myClass : IEnumerable<SomeType>

例如,现在您可以调用。

只有以下扩展方法由.NET Framework为

AsParallel()-启用查询的并行化。(由ParallelEnumerable定义。)

AsQueryable()-将IEnumerable转换为IQueryable。(由Queryable定义。)

Cast()-将IEnumerable的元素强制转换为指定的类型。(由Enumerable定义。)

OfType()-根据指定类型筛选IEnumerable的元素。(由Enumerable定义。)


是您正在寻找的。

的.NET Framework仅定义了以下扩展方法:

AsParallel()-启用查询的并行化。(由ParallelEnumerable定义。)

AsQueryable()-将IEnumerable转换为IQueryable。(由Queryable定义。)

Cast()-将IEnumerable的元素强制转换为指定的类型。(由Enumerable定义。)

OfType()-根据指定类型筛选IEnumerable的元素。(由Enumerable定义。)


是您正在寻找的。

大多数扩展方法用于泛型
IEnumerable
,而不是非泛型
IEnumerable
。大多数扩展方法用于泛型
IEnumerable
,而不是非泛型
IEnumerable
不“包含”扩展方法,因此,它是扩展方法。接口不能有方法定义。“定义”这个词更合适吗?好吧,有些类为该接口定义扩展方法,因此这确实是一个更好的措辞,但情况正好相反。
IEnumerable
不“包含”扩展方法,因此它是扩展方法。接口不能有方法定义。“defines”这个词更合适吗?好吧,有些类为接口定义扩展方法,所以这确实是一个更好的措辞,但情况正好相反。
class myClass<T> : IEnumerable<T>
class myClass : IEnumerable<KeyValuePair<int, string>>
{
    public Dictionary<int, string> dctIdName = new Dictionary<int, string>();

    public myClass()
    {
        for (int idx = 0; idx < 100; idx++)
        {
            dctIdName.Add(idx, string.Format("Item{0}", idx));
        }

    }

    // IEnumerable Member
    public IEnumerator<KeyValuePair<int, string>> GetEnumerator()
    {
        foreach (KeyValuePair<int, string> o in dctIdName)
        {
            yield return o;
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }
}