gpt4 book ai didi

c# - 是否可以在一个类中实现多个 IEnumerable

转载 作者:太空狗 更新时间:2023-10-30 00:44:32 24 4
gpt4 key购买 nike

我想做这样的事情:

class T : IEnumerable<string>, IEnumerable<int>
{
string [] _strings = new string [20];
int[] _ints = new int[20];

public T() { }

IEnumerator<string> IEnumerable<string>.GetEnumerator()
{
foreach (string str in _strings)
yield return str;
}

IEnumerator<int> IEnumerable<int>.GetEnumerator()
{
foreach (int i in _ints)
yield return i;
}

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

}
//Using in code:
T t = new T();
foreach (int i in t)
//to do something
foreach (string str in t)
//to do stuff

我想知道有没有办法实现它。可能有技巧吗?

最佳答案

您几乎成功地实现了这两个接口(interface) - 您只需要更改非泛型实现以显示您正尝试委托(delegate)给哪个泛型实现。例如:

IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable<int>)this).GetEnumerator();
}

但是,因为您要实现多个 IEnumerable<T>您需要在 foreach 循环中强制转换以显示要使用的接口(interface):

T t = new T();
foreach (int i in (IEnumerable<int>) t)
//to do something
foreach (string str in (IEnumerable<string>) t)

不过,我个人强烈建议反对尽可能这样做——这会给阅读您的代码的人带来很多困惑。

有关编译器如何处理要在 foreach 中迭代的表达式的详细信息,请参阅 C# 语言规范的第 8.8.4 节循环。

(通过对一个接口(interface)使用“正常”接口(interface)实现,您可以提供一种“默认”——但我不认为这真的会让它变得更好。)

关于c# - 是否可以在一个类中实现多个 IEnumerable<T> ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7657449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com