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

Posted

技术标签:

【中文标题】我正在尝试从另一个对象列表分配和输出到控制台字符串列表。但它继续重复字符串【英文标题】:I'm trying to assign and output to console List of strings from another List of objects. But it continues to duplicate strings 【发布时间】:2021-12-26 03:12:26 【问题描述】:

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

逻辑:

从数组中生成 3 条鱼,并将它们添加到生成的鱼列表中。 根据鱼的名称将诱饵列表分配给新创建的鱼。 通过 Debug.Log 在控制台中输出(我使用的是 Unity)。
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。我在互联网上找不到类似的东西。

【问题讨论】:

@derHugo 的 asignedLures 内容不是每次都根据名称而变化吗?我试图在控制台中输出:Debug.Log(fish.lures[0]);并正确输出。 您的返回任何东西的方法也将其分配给一个变量;不要这样做 - 只返回名称/诱饵列表 @CaiusJard 泰。我会尽力。但是我在另一种方法中使用了一些变量,所以我有点困惑如何重写代码而不使用它们。我基本上不能说:lures = AsignLure(AsignName())。它再次给了我随机诱饵。 AsignLure(AsignName()) -是的,但那是因为你随机命名。我的意思是你的 AsignX 方法既分配了一些东西,也返回了一些东西 - 这是一个混乱的秘诀。做一个或另一个 【参考方案1】:

那么你替换 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)];

【讨论】:

谢谢。它有效! 版后补充:不知道可以这样写 O_o 非常感谢,我会好好使用的;)

以上是关于我正在尝试从另一个对象列表分配和输出到控制台字符串列表。但它继续重复字符串的主要内容,如果未能解决你的问题,请参考以下文章

从另一个客户端控制 Spotify

如何修复“类型'字符串'不可分配给类型'从不'”?

模板中的 Django 字典:从另一个对象属性中获取键

SaveChangesAsync 失败,分配用户到对象 AspNetUsers 重复键违规

有没有办法将 java 数据类型输出到控制台?

无法从另一个视图控制器获取表视图数据