有没有办法区分列表中的项目?

时间:2017-02-06 20:08:32

标签: c# list unity3d floating-point return

虽然这确实与Unity有关,但它实际上更像是一个普通的编程问题。

所以我不能使用元组,我需要返回多个浮点值。这有点像伤害增益。所以我会让弓箭手给骑兵造成额外伤害,这个伤害是x。我的代码(虽然很麻烦)可以说得更好:

private List<float> DetermineCounter()
{
    CounterData cd = new CounterData();

    List<float> counterList = new List<float>();

    if (gameObject.tag == "Hoplite")
    {
       float archer = cd.counterArcher = 10.0f;
       float peltast = cd.counterPeltast =5.0f;
       float slinger = cd.counterSlinger = 20.0f;

        List<float> counterData = new List<float>();
        counterData.Add(archer);
        counterData.Add(peltast);
        counterData.Add(slinger);

        counterData = counterList;


    }

    if (gameObject.tag == "Peltast")
    {
        float archer = cd.counterArcher = 5.0f;
        float slinger = cd.counterSlinger = 5.0f;

        List<float> counterData = new List<float>();
        counterData.Add(archer);
        counterData.Add(slinger);

        counterData = counterList;

    }

    if (gameObject.tag == "Archer")
    {
        float cavalry = cd.counterCavalry = 15.0f;
        float slinger = cd.counterSlinger = 10.0f;

        List<float> counterData = new List<float>();
        counterData.Add(cavalry);
        counterData.Add(slinger);

        counterData = counterList;

    }

    if (gameObject.tag == "Cavalry")
    {
        float hoplite = cd.counterHoplite = 20.0f;
        float peltast = cd.counterPeltast = 10.0f;

        List<float> counterData = new List<float>();
        counterData.Add(hoplite);
        counterData.Add(peltast);

        counterData = counterList;

    }
    return counterList;

}

因此它返回2或3个值,具体取决于我有脚本所在的对象。因此,如果它是一个射手,我有脚本,那么它将返回值15和10.我的问题是这些不仅仅是任何值,它们意味着特定的东西。 15涉及对骑兵的额外伤害因素,这一信息很重要。

因此,当我使用foreach作为列表时,无法确定每个值对应的内容。我想知道是否有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以使用Dictionary获取返回的结果,并按键访问必要的数据,如下所示:

Dictionary<string, float> result = DetermineCounter();
float hoplite = result["hoplite"];

答案 1 :(得分:0)

我会传递ref参数:

private void DetermineCounter(ref float archer, ref float peltast, ref float slinger, ref float cavalry. ref float hoplat)
{
    if (gameObject.tag == "Hoplite")
    {
       archer =  10.0f;
       peltast = 5.0f;
       slinger  = 20.0f;
    }
    else if (gameObject.tag == "Peltast")
    {
        archer = 5.0f;
        slinger = 5.0f;
    }
    else if (gameObject.tag == "Archer")
    {
        cavalry = 15.0f;
        slinger = 10.0f;
    }
    else if (gameObject.tag == "Cavalry")
    {
        hoplite = 20.0f;
        peltast = 10.0f;
    }
}