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而是使用.