我正在尝试使用 Unity 编写一些脚本,但我在理解 struct 的工作原理方面遇到了一些问题。
从代码库开始:
public class Engine : MonoBehaviour {
public Hero selectedHero;
public List<Hero> heroes;
public struct Hero {
public string name;
public Hero(string n) {
name = n;
}
}
}
首先,我尝试制作一些功能来选择/取消选择..
/* ... */
public Hero getSelected(Hero h) {
return selectedHero;
}
public void setSelected(Hero h) {
selectedHero = h;
}
public bool hasSelected(Hero h) {
return (selectedHero != null);
}
public void clearSelected() {
selectedHero = null; // This is not working ! :'(
}
/* ... */
我得到了这个错误:
无法将 null 转换为,
Hero
因为它是值类型
我阅读了很多关于 C# 和 Unity 脚本的内容,答案是:
struct 不能为 null,就像 int 不能为 null,float 不能为 null - 它们都是值类型
但 ?什么是真正的解决方案!?我使用了两个丑陋的解决方案来避免这种情况:
解决方案#1我可以在使用属性public bool hasSelected
之前放置一个并始终测试这个。selected
解决方案 #2如果长度为 0 或 1,则创建一个List<Hero> selected
而不是简单的并处理。Hero
是否存在更好的解决方案,更干净?!
奖励问题:如何创建一个基于测试返回单个英雄的函数,我最好的(丑陋的)解决方案:
public Hero GetHero(string name) {
foreach (Hero hero in heroes) {
if (hero.name == name) {
return hero;
}
}
return null; // Not working ?! What can I return ?!
}