Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity C#运行存储在字典中的随机启动例程_C#_Unity3d_Ienumerator - Fatal编程技术网

Unity C#运行存储在字典中的随机启动例程

Unity C#运行存储在字典中的随机启动例程,c#,unity3d,ienumerator,C#,Unity3d,Ienumerator,我在C#Unity文件中有一本字典,类型为dictionary dic。 我想选择一个随机字符串,将其与枚举数匹配,然后运行协同程序 棘手的部分是我的字典位于不同的脚本中,因此我不确定如何做到这一点 我确实尝试了传入枚举器的字符串,但没有成功+我必须传递参数 我还尝试通过直接访问属性键来访问枚举数,如下所示: 启动例程(File2.enumerator1()),其中File2是我的另一个文件,enumerator1是我试图调用的随机枚举数之一,但这不会太有效,因为Idk指定了哪个枚举数,因此无法

我在C#Unity文件中有一本字典,类型为dictionary dic。 我想选择一个随机字符串,将其与枚举数匹配,然后运行协同程序

棘手的部分是我的字典位于不同的脚本中,因此我不确定如何做到这一点

我确实尝试了传入枚举器的字符串,但没有成功+我必须传递参数

我还尝试通过直接访问属性键来访问枚举数,如下所示:

启动例程(File2.enumerator1()),其中File2是我的另一个文件,enumerator1是我试图调用的随机枚举数之一,但这不会太有效,因为Idk指定了哪个枚举数,因此无法指定属性

有什么想法吗


thx

我假设您可以访问并能够修改与词典相关的代码?如果是这样,你可以尝试另一种方法。这是您的第二个文件可能喜欢的内容(编辑以演示我使用
Func
的原因):

如下所示,简化版本可能如下所示:

    public void SomeMethod ( )
    {
        var routine = GetRandomRoutine ( );
        StartCoroutine ( routine( "Hello!" ) );
    }
    private Dictionary<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 ( ) { 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, _directions.Length ) ];
        if ( _functions.TryGetValue ( direction, out var func ) ) return func;
        return null;
    }
private Dictionary\u函数;
私有字符串[]_方向={“北”、“南”、“东”、“西”};
私有void开始()
{
_函数=新字典
{
[“北”]=北(),
[“南部”]=南部(),
[“东”]=东(),
[“西”]=西()
};
}
public IEnumerator North(){yield return null;}
public IEnumerator South(){yield return null;}
public IEnumerator East(){yield return null;}
公共IEnumerator West(){yield return null;}
公共IEnumerator GetRandomRoutine()
{
var方向=_方向[UnityEngine.Random.Range(0,_方向.Length)];
if(_functions.TryGetValue(direction,out var func))返回func;
返回null;
}

和的调用方式相同,但不传递任何参数。

请给出代码。您不必使用
Func
。只需直接使用
IEnumerator
,即可将其传递给
start例程
调用,并保存对另一个方法的调用。调用GetRandomRoutine()时,如何传入参数?然后使用中每个枚举数的参数dictionary@GoFast我修改了答案以证明我的初衷,同时也解决了Thomas关于调用额外方法的顾虑。非常感谢!这真的很有帮助,我学到了很多bit@GoFast如果问题得到了回答,就把它标出来,并在下面画一条线。干杯
    private Dictionary<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 ( ) { 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, _directions.Length ) ];
        if ( _functions.TryGetValue ( direction, out var func ) ) return func;
        return null;
    }