随机种子递归函数.我该怎么做?

Sia*_*lis 5 c#

我有一个递归函数,在函数中选择了一个数组中的随机元素,但无论我做什么,我都会得到相同的种子.

static Random rand = new Random();
public String spintaxParser(String s)
    {
        if (s.Contains('{'))
        {
            int closingBracePosition = s.IndexOf('}');
            int openingBracePosition = closingBracePosition;

            while (!s[openingBracePosition].Equals('{'))
                openingBracePosition--;

            String spintaxBlock = s.Substring(openingBracePosition, closingBracePosition - openingBracePosition + 1);

            String[] items = spintaxBlock.Substring(1, spintaxBlock.Length - 2).Split('|');


            s = s.Replace(spintaxBlock, items[rand.Next(items.Length)]);

            return spintaxParser(s);
        }
        else
        {
            return s;
        }
    }
Run Code Online (Sandbox Code Playgroud)

在递归函数中处理Random的最佳方法是什么?

Bra*_*etz 3

Random在递归函数范围之外声明对象的单个(静态)实例,然后从递归函数内部调用该实例。

的默认构造函数Random将自动使用当前时间戳作为种子,因此您会一遍又一遍地获得相同的值,因为您不断创建该Random对象的新实例。

编辑:另外,你可以尝试这个,尽管它绝对不理想。与此方法相比,我更喜欢单个Random实例或静态种子。

Random r = new Random( Guid.NewGuid().GetHashCode() );
Run Code Online (Sandbox Code Playgroud)