博客
关于我
Unity学习笔记:IEnumerator、yield
阅读量:785 次
发布时间:2019-03-25

本文共 1257 字,大约阅读时间需要 4 分钟。

Unity学习笔记:C#中的IEnumerator 和 yield

在C#编程中,IEnumerator接口和yield关键字是绝对密不可少的概念,作为开发人员,我们应当深入理解它们的用法和特性。本文将从基础到应用详细阐述这两者以及它们在项目开发中的实际应用场景。

IEnumerator接口是C#中用来定义可迭代对象的标准。它实际上是一个迭代器接口,用于管理一个可读集合的元素序列。通过实现IEnumerator接口,一个对象就能向外部代码暴露成一个可遍历的资源。例如,在Unity项目中,我们常常需要遍历Assetuntos或某些自定义数据集合,这时候IEnumerator就派上用场了。

与IEnumerable类似,IEnumerator提供了两个主要方法:

  • public int Current { get; }
  • public bool MoveNext();
  • Current属性用于获取当前元素,MoveNext方法则用作遍历下一个元素的操作点。通过调用MoveNext()方法,我们可以逐个获取可迭代资源中的元素,再通过Current属性获取具体的值。这种设计让开发者能够轻松地在代码中迭代各种数据序列,例如string、List

    或自定义类集合等等。

    而yield关键字,则是C#中用来定义迭代器的一种简洁方式。它允许开发者用一种声明性方式明确哪部分代码会生成迭代资源。在 흐连符号前后,写出代码块会被编译器自动转换成IEnumerator的实现类。比如:

    IEnumerator GetPlayers() {    yield return "Player1";    yield return "Player2";}

    这样的代码会生成一个IEnumerator接口的实现类,返回的IEnumerator对象可以被依次读取"Player1"和"Player2"这两个值提示。这在项目中非常有用,特别是在需要频繁重用或者在界面上循环显示数据的时候。

    需要注意的是,不同于传统的写法,使用yield关键字的函数将返回IEnumertor类型,而不是直接返回集合本身。这点在接收端也需要特别注意,如果错误地使用它作为集合资源,可能会导致运行时错误。因此,在实际应用中,建议先检查返回值是否为IEnumerator类型,再根据具体需求进行处理。

    在Unity项目中,这些概念尤为重要。例如,在AssetBundle的管理中,我们常常需要以迭代的方式加载或卸载资源。通过IEnumerator和yield,我们可以创建更高效的资源管理机制,减少代码冗余,提升运行效率。另外,在游戏自定义UI系统实现时,也需要利用IEnumerator和yield来实现动态数据的迭代和更新。

    总结来说,IEnumerator和yield是C#中极为实用的工具,它们不仅允许开发者轻松地管理数据迭代,还为代码编写提供了一种更加灵活和可读的方式。在编写Unity项目时,掌握它们的用法和特点,将有助于开发更高效、更优质的代码。

    转载地址:http://bytuk.baihongyu.com/

    你可能感兴趣的文章
    mysql截取sql语句
    查看>>
    mysql截取身份证号前几位_EXCEL中怎样截取身份证号前六位数字
    查看>>
    mysql手工注入
    查看>>
    MySQL执行SQL文件出现【Unknown collation ‘utf8mb4_0900_ai_ci‘】的解决方案
    查看>>
    Mysql执行update by id的过程
    查看>>
    mysql执行计划
    查看>>
    MySQL执行计划 EXPLAIN参数
    查看>>
    MySQL执行计划【explain】,看这一篇就够啦!
    查看>>
    Mysql执行计划字段解释
    查看>>
    mysql执行计划怎么看
    查看>>
    MySQL执行计划解读
    查看>>
    mysql执行顺序与索引算法
    查看>>
    mysql批量update优化_Mysql中,21个写SQL的好习惯,你值得拥有呀
    查看>>
    mysql批量update操作时出现锁表
    查看>>
    MYSQL批量UPDATE的两种方式
    查看>>
    mysql批量修改字段名(列名)
    查看>>
    MySQL批量插入数据遇到错误1213的解决方法
    查看>>
    mysql技能梳理
    查看>>
    MySQL报Got an error reading communication packets错
    查看>>
    Mysql报错Can‘t create/write to file ‘/tmp/#sql_3a8_0.MYD‘ (Errcode: 28 - No space left on device)
    查看>>