接口与从Java到C#的迭代器方法的等效性,然后将在类上实现?

时间:2017-02-03 12:58:37

标签: java c# interface

我正在将项目从Java转换为C#。在这个Java项目中,有一个接口:public interface TrackIterator,然后它作为其成员:public Iterator createIterator();.要实现它的类有createIterator作为返回对象的Arraylist的方法(在C#List中),我如何将它从Java转换为C#,这样我就可以在转换后的C#类上实现它

// interface
public interface TrackIterator
{
    public Iterator createIterator();
}

// class that implements it
public class trackList implements TrackIterator
{
    // other methods, fields, etc

    // method from interface TrackIterator
    public Iterator createIterator()
    {
        // popularSongs is an ArrayList of objects in Java, in C# it's a List<MyTrack>
        return popularSongs.iterator();
    } 
}

1 个答案:

答案 0 :(得分:0)

我看到它的方式,你可以通过两种方式解决这个问题。第一个是TrackList实现IEnumerable<Track>,并推出自己的枚举:

public class Track 
{ 
    public bool IsGoodTrack => true;
}

public class TrackList : IEnumerable<Track>
{
    private List<Track> tracks = new List<Track>();
    public IEnumerator<Track> GetEnumerator()
    {
        // Implement custom logic here.
        foreach (var track in tracks)
        {
            if (track.IsGoodTrack())
              yield return track;
        }
    }

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

或者,如果在List<Track>上曝光没有任何特殊逻辑,只需在需要的地方使用List<Track>

public class Foo
{
  // Foo has a `List<Track>` property:
  public List<Track> Tracks { get; } = new List<Track>();
}

如果你只想获得一个包含曲目的列表并将它们打印到控制台,它就像这样简单:

var listOfTracks = new List<Track>();
foreach (var track in listOfTracks)
{
    Console.WriteLine(track);
}