首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是什么样的内联函数,它是如何工作的?

这是什么样的内联函数,它是如何工作的?
EN

Stack Overflow用户
提问于 2022-03-28 18:58:35
回答 1查看 86关注 0票数 0

我在联合中制作了一个NPC路径工具,我从另一个堆栈溢出帖子(如何使bezier连续或非连续的单个锚点)中借用了一些功能。

我没有复制或重新使用任何我自己无法做到的东西,唯一的例外是这一行(在文章的底部),不幸的是,整个程序都依赖于这一行。

我知道这是某种内联函数声明/定义,但我不明白它是如何工作的。我认为最终的结果是生成了一个ControlPoint列表,但我不完全确定。

我不会为此烦恼,但我总是从另一个类的循环中得到一个超出界限的错误,并且错误代码指向这一行。我相信,如果我能理解这条线并解构它,我就能解决它。我怀疑它是某种特定于C#的三元操作符,但我以前从未见过它,尽管我尝试过,但我不知道该搜索什么,也不知道在哪里找到合适的文档来解释它。

所以,本质上,我要求解释这个人所使用的特定代码行上的语法糖,这样我就能够解构这一行代码,并在我的程序中解决这个问题。

任何帮助都是感激的,干杯!

(原始代码样本):

代码语言:javascript
复制
public ControlPoint this[int i] { get { return points[(loop && i == points.Count) ? 0 : i]; } }

(ControlPoint是一个独立的类,用于定义锚点和切点在贝塞尔曲线上的属性和方法)

(点数是ControlPoints的列表)

(循环是一个布尔变量,它定义路径是否已关闭)

编辑:看起来我不明白的原因不仅仅是因为我不太熟悉三元操作符,而是因为这个人使用了索引器/智能数组,这是我以前从未见过的。我将删除它,因为我个人认为它过于复杂,但是这里是完全解构的索引器(没有任何三元操作符):

代码语言:javascript
复制
public ControlPoint this[int i]
    {
        get
        {
            if (loop && i == points.Count)
            {
                return points[0];
            }
            else
            {
                return points[i];
            }
        }
    }

谢谢大家的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-28 19:12:31

下面是详细的版本:

代码语言:javascript
复制
if ((loop) && (i == points.Count))
{
    return points[0];
}
else
{
    return points[i];
}

如果在最后一个元素之后请求第一个元素,则返回第一个元素似乎是在“循环”数组。这意味着如果数组有10个元素(从0到9),并且请求元素10,它将“循环”并返回第一个元素。

一个“更安全”的选择(与您的问题正交)是使用模块化(%)操作符来启用“循环”(更常见的称为循环缓冲器 ):

代码语言:javascript
复制
if (loop))
{
    return points[i % points.Count];
}
else
{
    return points[i];
}

或者只是

代码语言:javascript
复制
return points[loop ? (i % points.Count) : i];
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71652410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档