我正在将项目从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();
}
}
答案 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);
}