首页 > 解决方案 > 我正在尝试从另一个对象列表分配和输出到控制台字符串列表。但它继续重复字符串

问题描述

我正在尝试将 lure List 分配给 fish objects list 中的 Fish objects 并输出到 console 。但无论如何,它都会继续随机复制字符串(诱饵)。我真的没有办法解决它。逻辑上它必须工作>_>

逻辑:


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。我在互联网上找不到类似的东西。

标签: c#listclassunity3dforeach

解决方案


好吧,您替换的内容asignedLures当然是每次迭代的相同列表

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

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

实际上,我根本没有理由拥有该assignedLure领域。

我宁愿直接返回列表,例如

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)];
}

推荐阅读