c# - 关于 C# 中的 IEnumerable 接口(interface)的一些说明?

标签 c# .net

我是 C# 的新手(我来自 Java),我对以下的使用有疑问:

我有这门课:

namespace DataModel.MaliciousCode
{

    public class PagedMalicious : Shared.Paged
    {
        public IEnumerable<MaliciousSmall> MaliciousCode { get; set; }

    }
}

如您所见,此类仅包含一个 IEnumerable<MaliciousSmall> MaliciousCode

阅读在线文档,我似乎明白了 IEnumerable是一个接口(interface),它给我一个非泛型集合上的迭代器。

前面的断言到底是什么意思?

我有 MaliciousSmall,它是我的应用程序中模型对象的类型(一个包含一些映射数据库表字段的属性的对象)

所以我的疑问是:

  • IEnumerable<MaliciousSmall> MaliciousCode : MaliciousCode 是 MaliciousSmall 对象的可迭代集合?所以这意味着它代表一个集合和一些提供的方法来迭代它?

  • 如果前面的断言是真的,那么 MaliciousCode 对象是一个可迭代的集合,但是 IEnumerable 是一个接口(interface),所以谁实现了迭代这个集合的方法(来自 Java 我认为没有提供实现方法的接口(interface))

有人可以帮助我理解这些东西吗?

谢谢

安德里亚

最佳答案

IEnumerable<MaliciousSmall> MaliciousCode: MaliciousCode is an iterable collection of MaliciousSmall objects? So it means that it represent a collection and some provided methods to iterate on it?

有点像 - IEnumerable<T>提供一种方法 - GetEnumerator - 返回 IEnumerator<T> . THAT 接口(interface)允许您迭代集合。预 Linq 所有 IEnumerable允许你做的是在 foreach 中使用集合循环(或直接使用提供的 IEnumerator,这种情况很少见)。 Linq 已经在 IEumerable<T> 上定义了扩展方法允许更复杂的查询,如 Select , Where , Count

If the previous assertion is true, ok MaliciousCode object is an iterable collection but IEnumerable is an interface so who implement the method to iterate on this collection (coming from Java I think that an interface is not provided of implemented methods)

通常,实现是通过使用像 List<MaliciousSmall> 这样的底层集合类型来提供的。或 MaliciousSmall[] .因此 IEnumerable 实现由该类提供。 yield C# 2.0 中引入的关键字允许您“返回”IEnumerable<T>。并让编译器提供实际的实现。

因此在您的类(class)中,您可以在内部将集合实现为 List<T> :

public class PagedMalicious : Shared.Paged
{
    public IEnumerable<MaliciousSmall> MaliciousCode { get; set; }

    public PagedMalicious()
    {
        MaliciousCode = new List<MaliciousSmall>();
    }

    // other private methods that add to MaliciousCode
}

IEnumerable<T>的使用允许您在不更改公共(public)接口(interface)的情况下更改内部实现。

关于c# - 关于 C# 中的 IEnumerable 接口(interface)的一些说明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22358821/

相关文章:

c# - 在 C# 中的运行时更新 numbericUpdown

c# - Parallel.ForEach 问题

c# - xsd.exe 自动实现的属性

c# - ListView 函数中的行错误帮助

c# - 获取未运行的应用程序的完整路径的最佳方法是什么?

.net - WCF wsdl wsdl :import location, SOAP :address location are having machine name?

c# - 按键从字典中删除并检索值

c# - 我应该在 .Net Web Api 2 中返回状态代码还是抛出异常

c# - 使用参数中的匿名函数验证函数调用

c# - 了解 MassTransit 中的 "Finalize"