Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法区分列表中的项目?_C#_List_Unity3d_Floating Point_Return - Fatal编程技术网

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

C# 有没有办法区分列表中的项目?,c#,list,unity3d,floating-point,return,C#,List,Unity3d,Floating Point,Return,虽然这确实涉及到统一性,但它实际上更像是一个一般的编程问题 所以我不能使用元组,我需要返回多个浮点值。这些有点像伤害增益。所以我会让弓箭手对骑兵造成额外的伤害,这个伤害是x。我的代码(虽然很麻烦)可以更好地说明: private List<float> DetermineCounter() { CounterData cd = new CounterData(); List<float> counterList = new List<float&g

虽然这确实涉及到统一性,但它实际上更像是一个一般的编程问题

所以我不能使用元组,我需要返回多个浮点值。这些有点像伤害增益。所以我会让弓箭手对骑兵造成额外的伤害,这个伤害是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;

}
私有列表确定计数器()
{
计数器数据cd=新计数器数据();
列表计数器列表=新列表();
如果(gameObject.tag==“Hoplite”)
{
漂浮弓箭手=cd.反弓箭手=10.0f;
浮球直径=cd,对角撑=5.0f;
浮子甩油环=cd。埋头甩油环=20.0f;
列表计数器数据=新列表();
计数器数据。添加(archer);
counterData.Add(peltast);
计数器数据。添加(甩油机);
计数器数据=计数器列表;
}
如果(gameObject.tag==“Peltast”)
{
浮动弓箭手=cd.反弓箭手=5.0f;
浮子甩油环=cd。埋头甩油环=5.0f;
列表计数器数据=新列表();
计数器数据。添加(archer);
计数器数据。添加(甩油机);
计数器数据=计数器列表;
}
如果(gameObject.tag==“弓箭手”)
{
浮动骑兵=cd。反骑兵=15.0华氏度;
浮子甩油环=cd。埋头甩油环=10.0f;
列表计数器数据=新列表();
反数据。添加(骑兵);
计数器数据。添加(甩油机);
计数器数据=计数器列表;
}
如果(gameObject.tag==“骑兵”)
{
浮式hoplite=cd.反式hoplite=20.0f;
浮球直径=cd,对角撑=10.0f;
列表计数器数据=新列表();
counterData.Add(hoplite);
counterData.Add(peltast);
计数器数据=计数器列表;
}
返回计数器列表;
}
因此它返回2或3个值,这取决于脚本所在的对象。因此,如果我使用脚本的是弓箭手,那么它将返回值15和10。我的问题是,这些不仅仅是任何价值观,它们意味着特定的东西。15与骑兵的额外伤害系数有关,此信息非常重要


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

您可以对返回的结果使用Dictionary,并通过如下键访问必要的数据:

Dictionary<string, float> result = DetermineCounter();
float hoplite = result["hoplite"];
Dictionary result=determinateCounter();
float hoplite=结果[“hoplite”];

一种解决方案是创建一个包含可能返回值的新类,并返回该类的对象,而不是列表。为什么不返回损坏类型的对象或类似的对象?出于好奇,为什么不能使用元组?是的,返回一个描述该值的对象(并且在对象中也包含该值)而不仅仅是返回值。
计数器数据
计数器列表
发生了什么??