我正在尝试将另一个对象列表中的字符串列表分配并输出到控制台。但它继续复制字符串

I'm trying to assign and output to console List of strings from another List of objects. But it continues to duplicate strings

我正在尝试将诱饵列表分配给鱼对象列表中的鱼对象并输出到控制台。但无论如何它都会继续随机复制字符串(诱饵)。我真的没有办法解决它。从逻辑上讲它必须工作 >_>

逻辑:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    List<Fish> generatedFish;
    string fishName;
    string[] fishNames = {"Karas", "Karp", "Ploc" };
    List<string> asignedLures;

    // Start is called before the first frame update
    void Start()
    {
        generatedFish = new List<Fish>();
   

        generateFish();
       
        foreach(Fish fish in generatedFish)
        {
            Debug.Log(fish.fishName);
            foreach(string lure in asignedLures)
            {
                Debug.Log(lure);
            }
        }
        
    }
    class Fish
    {
        public string fishName { get; set; }
        public List<string> lures { get; set; }
    }
    public void generateFish()
    {
        int numberOfGeneratedFish = 2;

        for(int i = 0; i <= numberOfGeneratedFish; i++)
        {
            generatedFish.Add(new Fish
            {
                fishName = AsignName(),
                lures = AsignLure(fishName)
            });
        }

    }
    public string AsignName()
    {
        fishName = fishNames[Random.Range(0, fishNames.Length)];
        return fishName;
    }
    public List<string> AsignLure(string fishName)
    {
        

        switch (fishName) {
            case "Karas":
                asignedLures = new List<string> {"corn", "dough", "worms" };
                break;
            case "Karp":
                asignedLures = new List<string> { "potato", "corn", "pea" };
                break;
            case "Ploc":
                asignedLures = new List<string> { "perlovka", "mastique" };
                break;
        }
        return asignedLures;
    }
}

代码生成 Fish 并在控制台中输出它们。但是在输出错误的诱饵列表中。同样,它对所有的鱼都是一样的,但每 运行 就不同。像这次所有的鱼都会有“土豆”、“玉米”、“豌豆”。但另一次它会有“玉米”、“面团”、“蠕虫”。

请帮我解决一下 T_T。我在网上找不到类似的东西。

好吧,你替换了 asignedLures 的内容,所以当然每次迭代都是相同的列表

我认为您更想访问存储在 Fish 个实例中的列表

foreach(var fish in generatedFish)
{
    Debug.Log(fish.fishName);
    foreach(var lure in fish.lures)
    { 
        Debug.Log(lure);
    }
}

实际上,我根本看不出有那个 assignedLure 字段的理由。

我宁愿直接return列表,例如

public List<string> GetLureByName(string fishName)
{
    switch (fishName)
    {
        case "Karas":
            return new List<string> {"corn", "dough", "worms" };
       
        case "Karp":
            return new List<string> { "potato", "corn", "pea" };
         
        case "Ploc":
            return new List<string> { "perlovka", "mastique" };
    }

    // Depending on whether you want to actively handle the exception/that case either 
    return null;

    // Or if you want a "valid" return list but simply empty
    return new List<string>();
}

也一样
public string GetRandomName()
{
    return fishNames[Random.Range(0, fishNames.Length)];
}