【发布时间】:2014-03-24 20:32:30
【问题描述】:
我一直在尝试构建 IEnumorator 以允许我使用 foreach 语句快速将从 JSON 格式的字符串中提取的大量行插入到这些嵌套对象中。 Applines 类完全由 String Get/Set 语句组成。
由于某种原因,我收到三个指向类头的错误。我无法理解 a) 为什么以及如何我需要实施 IDisposable b) 为什么编译器不同意我的返回类型。
“AppAnnieImport”未实现接口成员“System.Collections.IEnumerable.GetEnumerator()”。 “AppAnnieImport.GetEnumerator()”无法实现“System.Collections.IEnumerable.GetEnumerator()”,因为它没有匹配的返回类型“System.Collections.IEnumerator”。
“AppAnnieImport”没有实现接口成员“System.IDisposable.Dispose()”
“AppAnnieImport”未实现接口成员“System.Collections.Generic.IEnumerator.Current”。 “AppAnnieImport.Current”无法实现“System.Collections.Generic.IEnumerator.Current”,因为它没有匹配的返回类型“AppLines”。
public class AppAnnieImport : IEnumerator<AppLines>, IEnumerable<AppLines>
{
public int code { get; set; }
public DateTime end_date { get; set; }
public string vertical { get; set; }
public string granularity { get; set; }
public string device { get; set; }
public List<AppLines> AppLine { get; set; }
private int position;
//IEnumerator and IEnumerable require these methods.
public IEnumerator<AppLines> GetEnumerator()
{
return (IEnumerator<AppLines>)this;
}
//IEnumerator
public bool MoveNext()
{
position++;
return (position < AppLine.Count);
}
//IEnumerable
public void Reset()
{ position = 0; }
//IEnumerable
public object Current
{
get { return (AppLine.ToArray())[position] ; }
}
}
【问题讨论】:
-
将光标放在
IEnumerator<AppLines>上并按Ctrl+。并选择实现接口。基本上你需要实现GetEnumerator的通用和非通用版本。 -
没有什么可以添加到问题的编译器解释中。
-
我不会同时创建 IEnumerable 和 IEnumerator 类,实现 IEnumerable,如果您需要自定义 IEnumerator,请将其作为单独的类。
-
我同意@LasseV.Karlsen 的观点,至少在公共类中(有时在私有类或内部类中都可以很方便地实现,其中混淆的可能性要小得多)。