如何使类可迭代?

Mon*_*RPG 19 c# iterable class c#-4.0

这是我的班级

public class csWordSimilarity
{
    public int irColumn1 = 0;
    public int irColumn2 = 0;
    public int irColumn3 = 0;
    public int irColumn4 = 0;
    public int irColumn5 = 0;
}
Run Code Online (Sandbox Code Playgroud)

我想使该类可迭代使用,如下所示

foreach (int irVal in myVarWordSimilarity)
{

} 
Run Code Online (Sandbox Code Playgroud)

myVarWordSimilaritycsWordSimilarity类型.所以我想迭代所有公共int变量.我如何修改csWordSimilarity类以使其像上面的方式一样进行迭代.

edv*_*dig 28

您可以实现IEnumerable并使GetEnumerator覆盖使用yield语句在变量上返回"迭代器"

class csWordSimilarity : IEnumerable<int>
{
    private int _var1 = 1;
    private int _var2 = 1;
    private int _var3 = 1;
    private int _var4 = 1;

    public IEnumerator<int> GetEnumerator()
    {
        yield return _var1;
        yield return _var2;
        yield return _var3;
        yield return _var4;
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}
Run Code Online (Sandbox Code Playgroud)


Jos*_*nig 9

实施IEnumerable.请参阅 使用迭代器(C#编程指南)

在你的情况下,你可以使用List类似的内置迭代器:

using System;
using System.Collections.Generic;

class csWordSimilarity : IEnumerable<int> {
    public int irColumn1 = 0;
    public int irColumn2 = 0;
    public int irColumn3 = 0;
    public int irColumn4 = 0;
    public int irColumn5 = 0;

    public IEnumerator<int> GetEnumerator() {
        return (new List<int>() { 
            irColumn1, irColumn2, irColumn3, irColumn4, irColumn5 
        }).GetEnumerator();
    }
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
        return GetEnumerator();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 仅出于返回其枚举器的目的而实例化新的 List 实例会产生相当大的开销,yield 语句简化了这一点并且更加优化。 (2认同)