C# - 如何在特定的类实例上设置ID

时间:2018-03-21 13:07:24

标签: c#

我是C#的新手,请原谅我,如果我问一个愚蠢的问题。

这是我的代码:

public class SpellsTemplate
{
    public int id;
    public string name;
    public int type;
    public float base_damage;
    public int buff;
    public float buff_debuff_time;
    public int healing;
    public float base_healing;
    public int class_specific;
    public float cooldown;
    public float cast_time;
    public string icon;
    public string game_prefab;
    public float flying_speed;
    public int chain;
    public float chain_distance;
    public int chain_max_targets;
}

public class SpellsHandler
{
    public List<SpellsTemplate> spellsTemplate = new List<SpellsTemplate>();
.......
some other stuff here....
.......

            spellsTemplate.Add(new SpellsTemplate()
            {
                id = Convert.ToInt32(mysqlReader["id"]),
                name = mysqlReader["name"].ToString(),
                type = Convert.ToInt32(mysqlReader["type"]),
                base_damage = (float)mysqlReader["base_damage"],
                buff = Convert.ToInt32(mysqlReader["buff"]),
                buff_debuff_time = (float)mysqlReader["buff_debuff_time"],
                healing = Convert.ToInt32(mysqlReader["healing"]),
                base_healing = (float)mysqlReader["base_healing"],
                class_specific = Convert.ToInt32(mysqlReader["class_specific"]),
                cooldown = (float)mysqlReader["cooldown"],
                cast_time = (float)mysqlReader["cast_time"],
                icon = mysqlReader["icon"].ToString(),
                game_prefab = mysqlReader["game_prefab"].ToString(),
                flying_speed = (float)mysqlReader["flying_speed"],
                chain = Convert.ToInt32(mysqlReader["chain"]),
                chain_distance = (float)mysqlReader["chain_distance"],
                chain_max_targets = Convert.ToInt32(mysqlReader["chain_max_targets"])
            });
}

有没有办法可以在班级的实例上设置ID? 像:

spellsTemplate.Add(new SpellsTemplate(Convert.ToInt32(mysqlReader["id"]))

然后将数据放入类变量。

另外,如果可以的话,我如何直接从所有其他实例中选择该实例而不用foreach?

有可能吗?

2 个答案:

答案 0 :(得分:1)

import pandas as pd df = ... df_total = pd.DataFrame(df.iloc[:, 1:].sum(), columns=["Total"]).T.reset_index() df_total.columns = df.columns df = pd.concat([df_total, df]) # Name y1 y2 y3 # 0 Total 12 14 15 # 1 Ben 1 2 3 # 2 Jane 4 5 6 # 3 Sarah 7 7 6 课程上写一个构造函数。这将强制任何实例化您的SpellsTemplate类的人提供某些值(例如ID)。

SpellsTemplate

构造函数是面向对象编程的真正重要部分 - 请read up on them:)

修改

关于第二个问题:

  

另外,如果可以的话,我如何直接从所有其他实例中选择该实例而不用foreach?

如果您只想使代码更清晰,可以编写类似于以下内容的代码:

public class SpellsTemplate
{
    public SpellsTemplate(int id)
    {
        this.Id = id;
    }

    // Make the setter for the ID property private, so it 
    // can only be set within this class (e.g. in the constructor).
    public int Id { get; private set; }

    // The rest of your properties go here.
}

然而,这是在幕后做的事情。

如果您真的关心性能,则需要使用类似哈希表或字典的数据类型。

答案 1 :(得分:1)

你也可以使用这样的词典:

Dictionary<int, object> spellsTemplate = new Dictionary<int, object>();
spellsTemplate.add(Convert.ToInt32(mysqlReader["id"]), yourObject);

要选择direclty,您可以:

spellsTemplate[id];