相关疑难解决方法(0)

为什么.net中的数组只实现IEnumerable而不是IEnumerable <T>?

我正在实现自己的ArrayList类,当我意识到这一点时,我感到很惊讶

public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
    return _array.GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)

没用.数组在.NET中不实现IEnumerator的原因是什么?

有没有解决方法?

谢谢

.net c# arrays ienumerable ienumerator

42
推荐指数
1
解决办法
3万
查看次数

为什么我不能使用数组的枚举器,而不是自己实现它?

我有一些像这样的代码:

public class EffectValues : IEnumerable<object>
{
    public object [ ] Values { get; set; }

    public IEnumerator<object> GetEnumerator ( )
    {
        return this.Values.GetEnumerator ( );
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ( )
    {
        return this.GetEnumerator ( );
    }
}
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨说:

"无法将类型'System.Collections.IEnumerator'隐式转换为'System.Collections.Generic.IEnumerator'.存在显式转换(您是否错过了转换?)"

我以为Array类型实现了IEnumerable接口,不是吗?因为我可以直接在Values实例上使用Linq功能.

.net c# linq arrays ienumerable

22
推荐指数
1
解决办法
5117
查看次数

什么是.NET公共语言运行时的泛型实现

当你在C#(或一般的.NET)中使用泛型集合时,编译器基本上是否只需要为特定类型制作泛型集合的腿部工作开发人员.所以基本上...它只是节省了我们的工作?

现在我想到了,这不可能是正确的.因为没有泛型,我们以前必须在内部创建使用非泛型数组的集合,因此有装箱和拆箱(如果它是值类型的集合)等.

那么,如何在CIL中呈现泛型?当我们说我们想要一些通用的东西时,我们在做什么呢?我不一定想要CIL代码示例(虽然这样可以),我想知道编译器如何获取我们的泛型集合并呈现它们的概念.

谢谢!

PS我知道我可以用ildasm来看看这个,但我对CIL看起来仍然像中文,我还没准备好解决这个问题.我只想知道C#(以及我猜其他语言)如何在CIL中渲染以处理泛型的概念.

.net c# generics cil

13
推荐指数
2
解决办法
3341
查看次数

标签 统计

.net ×3

c# ×3

arrays ×2

ienumerable ×2

cil ×1

generics ×1

ienumerator ×1

linq ×1