如何获取非列表的长度?

时间:2019-02-11 18:05:46

标签: c#

修复:

Dictionary<string, Dictionary<string, object>> saveState = new Dictionary<string, Dictionary<string, object>>();

不要介意这部分:

我有一些要保存到播放器中的数据。

此数据包含玩家需要阅读的级别,但是当我为级别创建UI元素时,我不想做很多功能,我想使其变得更容易,以便只需调用一个迭代级别的函数,然后根据多少个级别创建一定数量的帧即可。

我想计算有多少个关卡,以便可以“自动化”此框架创建过程,并且需要获取关卡数据(如果已完成等操作)。

PlayerData = new SetupData里面有一行,行Levels = new Levels,在那一行中,我有两个类,无论是什么Level1 = new Level的对象,还有一个Level2 = new Level,我想计算多少其中有脚本的人。

如果我要再添加5个Level2 = new Level,但要添加level3,level4等。我希望计算机知道Levels = new Levels里面有多少个

基本上:

Levels {

    Level1 = {Completed = true},
Level2 = {Completed = true},
Level3 = {Completed = true},

}

计数脚本:

Levels.Length // -- prints there are 3 levels.

这只是玩家数据:

public static SaveManager Instance { set; get; }
public SetupData state;

public object PlayerData;

PlayerData = new SetupData
    {
        // Level Data
        Levels = new Levels
        {
            Level1 = new Level
            {
                Name = "First Level",
                Progress = 0,
                Completed = false
            },
            Level2 = new Level
            {
                Name = "Second Level",
                Progress = 0,
                Completed = false
            },
        },
        // Character Data
        Player = new Player
        {
            SelectedColor = 0,
            Berries = 0
        }
    };

问题是这不是列表或其他内容,所以我不能使用.Length

SaveState脚本:

[Serializable]
public class Level
{
    public string Name;
    public int Progress;
    public bool Completed;
}

[Serializable]
public class Levels
{
    public Level Level1;
    public Level Level2;
}

[Serializable]
public class Player
{
    public int SelectedColor;
    public int Berries;
}

[Serializable]
public class SetupData
{
    public Levels Levels;
    public Player Player;
}

1 个答案:

答案 0 :(得分:1)

从这个问题很难说出你在问什么;请尝试澄清问题。

我最好的猜测是您在问“我如何以编程方式计算类型为Levels的类型为Level的字段数?”如果不是您的问题,请澄清。

您是这样做的:

using System;
using System.Linq;

class Level { } 
class Levels 
{
    public Level level1;
    public Level level2;
}

public class Program
{
    public static void Main()
    {
        Console.WriteLine(
          typeof(Levels)
            .GetFields()
            .Count(f => f.FieldType == typeof(Level)));
    }
}