我正在嘗試將誘餌串列分配給 fish 物件串列中的 Fish 物件并輸出到 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;
}
}
Code generates Fish and output them in console. But in outputs wrong lure list. Also it always same for all fishes, but differs every run. Like this time all fish will have "potato", "corn", "pea". But another time it'll have "corn", "dough", "worms".
Help me to fix it please T_T. I find nothing similar in internet.
uj5u.com熱心網友回復:
那么你替換的內容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)];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/357435.html
標籤:c# list class unity3d foreach
下一篇:OOP-理解繼承
