问题描述
我在C#Unity文件上有一个字典,类型为 Dictionary
棘手的部分是我的词典位于其他脚本中,,所以我不确定如何做到这一点。
我确实尝试了传入枚举器的字符串,但这没用+我必须传递参数。
我还尝试通过直接访问属性键来访问枚举数:
StartCoroutine(File2.enumerator1()),其中File2是我尝试的另一个文件,而enumerator1是我尝试调用的随机枚举器中的1个,但这并不太有效,因为Idk哪个枚举器被选中,因此无法指定该属性。
有什么想法吗?
thx
解决方法
我认为您可以访问并且有能力修改与词典相关的代码?如果是这样,您可以尝试另一种方法。这就是您的第二个文件所希望的(编辑以证明我使用Func
的原因):
private Dictionary<string,Func<string,IEnumerator>> _functions;
private string [ ] _directions = { "North","South","East","West" };
private void Start ( )
{
_functions = new Dictionary<string,IEnumerator>>
{
[ "North" ] = North,[ "South" ] = South,[ "East" ] = East,[ "West" ] = West
};
}
public IEnumerator North ( string message ) { Debug.Log ( $"North and \"{message}\"" ); yield return null; }
public IEnumerator South ( string message ) { Debug.Log ( $"South and \"{message}\"" ); yield return null; }
public IEnumerator East ( string _ ) { yield return null; }
public IEnumerator West ( string _ ) { yield return null; }
public Func<string,IEnumerator> GetRandomRoutine ( )
{
var direction = _directions [ UnityEngine.Random.Range ( 0,_directions.Length ) ];
if ( _functions.TryGetValue ( direction,out var func ) ) return func;
return null;
}
然后您将在第一个文件中这样调用它:
public void SomeMethod ( )
{
var routine = GetRandomRoutine ( );
StartCoroutine ( routine( "Hello!" ) );
}
如下所示,简化版本可能如下所示:
private Dictionary<string,IEnumerator> _functions;
private string [ ] _directions = { "North",IEnumerator>
{
[ "North" ] = North ( ),[ "South" ] = South ( ),[ "East" ] = East ( ),[ "West" ] = West ( )
};
}
public IEnumerator North ( ) { yield return null; }
public IEnumerator South ( ) { yield return null; }
public IEnumerator East ( ) { yield return null; }
public IEnumerator West ( ) { yield return null; }
public IEnumerator GetRandomRoutine ( )
{
var direction = _directions [ UnityEngine.Random.Range ( 0,out var func ) ) return func;
return null;
}
以相同的方式被调用,但是没有传递任何参数。