随机数生成器中的堆栈溢出

Rag*_*ave -2 c# stack-overflow random

出于某种原因,当我在Random类中不使用种子时,此代码工作正常,但如果我尝试使用DateTime.Now获取更随机的数字,我会得到StackOverflowException!我的课非常简单.有人能告诉我这里我做错了什么吗?请参见MakeUniqueFileName.

public class TempUtil
{
    private int strcmp(string s1, string s2)
    {
        try
        {
            for (int i = 0; i < s1.Length; i++)
                if (s1[i] != s2[i]) return 0;
            return 1;
        }
        catch (IndexOutOfRangeException)
        {
            return 0;
        }
    }
    private int Uniqueness(object randomObj)
    {
        switch (randomObj.ToString())
        {
            case "System.Object":
            case "System.String":
                return randomObj.ToString()[0];
            case "System.Int32":
                return int.Parse(randomObj.ToString());
            case "System.Boolean":
                return strcmp(randomObj.ToString(), "True");
            default:
                return Uniqueness(randomObj.ToString());
        }
    }
    public string MakeUniqueFileName()
    {
        return "C:\\windows\\temp\\" + new Random(Uniqueness(DateTime.Now)).NextDouble() + ".tmp";
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 11

你正在调用DateTime.Now.ToString(),它没有给你一个你正在检查的字符串...所以你正在递归,用相同的字符串调用它...这仍然不是你的字符串之一寻找.

您不需要Random用来演示问题.这样做非常容易:

Uniqueness(""); // Tick, tick, tick... stack overflow
Run Code Online (Sandbox Code Playgroud)

期望它做什么?这是完全不清楚你的代码是在做,但我建议你沟Uniqueness彻底的方法.事实上,我建议你摆脱整个班级,Path.GetTempFileName而是使用.