分隔符值作为检索标签的间隔?

问题描述

我正在学习C#和Unity3D几个月,现在我偶然发现了一种逻辑,希望有人可以对我进行描述。 (我已经在Google上搜索了几个小时,甚至还查询了其他语言是否以这种方式使用枚举。)

此代码来自统一资产商店的免费资产,我尝试对其进行剖析。

一切对我来说都是可以理解的,但随后涉及到GetSliderData()和SetSliderData()函数。

我的问题:模部分如何工作?

在获取和设置值时,为什么仍要除法?还是某种语法,例如不是“> =”(小于或等于符号)的Lambda表达式“ =>”

提前感谢您的宝贵时间! Dom

public class SliderData : ScriptableObject
{
    // Data storage
    public List<float> sliderData;

    /* Use a single enum as retrieval label for any slider by using a splitter
     * value as interval. */
    private const int ENUM_INTERVAL = 16;
    public enum SliderField
    {
        // Customizer sliders
        DEPTH_MIN,DEPTH_MAX,PERLIN_SPEED,PERLIN_LEVEL,ZONE_PERLIN_SPEED,ZONE_PERLIN_LEVEL,MAP_PERLIN_SPEED,MAP_PERLIN_LEVEL,}

    /// Retrieves the value of the slider belonging to the given field constant.
    public float GetSliderData(SliderField field)
    {
        return sliderData[(int)field % ENUM_INTERVAL];
    }

    /// Sets the value of the slider belonging to the given field constant.
    public void SetSliderData(SliderField field,float value)
    {
        sliderData[(int)field % ENUM_INTERVAL] = value;
    }
}

解决方法

Get_Successor_Zones_From_Table.then(data => setZoneNames(data)); 的目的似乎是将给定的%值包装到field列表的现有索引上。

如果值达到/超过sliderData,它将从ENUM_INTERVAL重新开始。

对于您的方法,实际上,如果使用枚举值,这似乎有点多余,因为总之只有0个。但是它可以通过类型转换触发,例如8 ..但是为什么有人要这么做?

无论如何,这似乎只是假设(SliderField)17列表至少包含sliderData个元素...


通常来说,我不会使用这种结构,而是通过实际字段而不是这种“字典”列表来存储和访问值。

当然取决于用例以及以后如何精确使用资产。似乎涉及到一些您未在此处分享的行为。

但是,与其浏览神奇的枚举和列表索引,不如简单地

16

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...