Mat*_*att 4 .net c# ienumerable iterator interface
我可以做这个:
public class EnumerableTest : System.Collections.IEnumerable
{
System.Collections.IEnumerable data;
public EnumerableTest(System.Collections.IEnumerable d)
{
data = d;
}
public System.Collections.IEnumerator GetEnumerator()
{
foreach (object s in data)
{
yield return s;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我不能这样做?:
public class EnumerableTestString : System.Collections.Generic.IEnumerable<string>
{
System.Collections.Generic.IEnumerable<string> data;
public EnumerableTestString(System.Collections.Generic.IEnumerable<string> d)
{
data = d;
}
public System.Collections.Generic.IEnumerator<string> GetEnumerator()
{
foreach (string s in data)
{
yield return s;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误基本上说我错过了方法
public System.Collections.IEnumerator GetEnumerator();
Run Code Online (Sandbox Code Playgroud)
当我改变返回类型时GetEnumerator(),它告诉我我失踪了
public System.Collections.Generic.IEnumerator<string> GetEnumerator();
Run Code Online (Sandbox Code Playgroud)
如果我尝试包括两者,它告诉我我有一个重复的方法名称.
我怎么解决这个问题?
我怎么解决这个问题?
您需要使用显式接口实现来实现至少一种GetEnumerator方法,通常是非泛型方法.
代码只是带有using指令:)
using System.Collections;
using System.Collections.Generic;
public class EnumerableTestString : IEnumerable<string>
{
private IEnumerable<string> data;
public EnumerableTestString(IEnumerable<string> d)
{
data = d;
}
public IEnumerator<string> GetEnumerator()
{
foreach (string s in data)
{
yield return s;
}
}
// Explicit interface implementation for non-generic IEnumerable
public IEnumerator IEnumerable.GetEnumerator()
{
// Delegate to the generic version
return GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
创建两者 - 例如Explicit,将调用Implicit实现的实现.
例:
public class EnumerableTestString : System.Collections.Generic.IEnumerable<string>
{
System.Collections.Generic.IEnumerable<string> data;
public EnumerableTestString(System.Collections.Generic.IEnumerable<string> d)
{
data = d;
}
public System.Collections.Generic.IEnumerator<string> GetEnumerator()
{
foreach (string s in data)
{
yield return s;
}
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
380 次 |
| 最近记录: |