c# - 我正在尝试从另一个对象列表分配和输出到控制台字符串列表。但它继续重复字符串
问题描述
我正在尝试将 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。我在互联网上找不到类似的东西。
解决方案
好吧,您替换的内容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)];
}
推荐阅读
- java - GCC / LD链接JNA无法识别的损坏符号
- html - 背景图像未在 [ngStyle] Angular 2 中显示
- react-native - ReactNative:使用 React Native Navigation 如何移动到下一个屏幕
- r - R重命名相邻列
- python - 检查图像是否主要是黑白或彩色
- sql - 仅使用 SQl 比较 Oracle 中的逐行值变化
- c - C语言多线程添加不起作用
- jwt - 使用 https://jwt.io/ 使用 RSA 密钥签署 JWT 时签名无效
- c# - 如何使用 IDataErrorInfo 和数据注释进行简单验证
- c# - Docker 容器的 ASP.NET MVC 问题