Mic*_*les 1 c# random duplicate-removal
我有3个子类"Staff,Faculty,Student",每个类从父类人员那里得到用户的第一个姓氏,这个id就像在运行控制台应用程序时添加4个随机数.我遇到的问题是所有的类都得到相同的4位数,我该如何解决这个问题,是的,必须使用随机我不能使用静态计数器.
Person.cs"父类"
public class Person
{
static string title;
protected string firstName;
protected string lastName;
protected string address;
protected string gender;
protected string dateOfBirth;
protected string userID;
protected Random rnd = new Random();
Run Code Online (Sandbox Code Playgroud)
Faculty.cs
namespace Person
{
public class Faculty : Person
{
public Faculty(string aTitle, string aFirstName, string aLastName, string aAddress,
string aGender, string aDateOfBirth)
: base(aTitle, aFirstName, aLastName, aAddress,
aGender, aDateOfBirth)
{
this.userID = firstName.Substring(0, 1) + lastName.Substring(0, 5);
this.userID = this.userID + rnd.Next(1000, 9999);
Console.WriteLine(this.userID);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Staff.cs
namespace Person
{
public class Staff : Person
{
public Staff(string aTitle, string aFirstName, string aLastName, string aAddress,
string aGender, string aDateOfBirth)
: base(aTitle, aFirstName, aLastName, aAddress,
aGender, aDateOfBirth)
{
this.userID = firstName.Substring(0, 1) + lastName.Substring(0, 5);
this.userID = this.userID + rnd.Next(1000, 9999);
Console.WriteLine(userID);
}
}
}
Run Code Online (Sandbox Code Playgroud)
测试类
public class PersonTest
{
static void Main(string[] args)
{
Person testPerson = new Faculty(" Mr.", "Merry ", "Lanes", " 493 Bluebane RD", "Male", " 8-06-1953\n ");
Person studentPerson = new Student(" Mr.", "Jerry ", "Panes", " 456 Greenbane RD", "Male", " 8-10-1945\n");
Person staffPerson = new Staff(" Mr.", "Joe ", "Gaines", " 495 Redbane RD", "Male", " 8-21-1989\n ");
Console.ReadLine();
}//end main
Run Code Online (Sandbox Code Playgroud)
我没有看到你在哪里声明和初始化rnd.我猜测它在Person中声明为实例成员,并在Person的构造函数中初始化 - 始终默认初始化,这意味着它使用时间作为种子,这意味着所有使用毫秒的调用都获得相同的种子.
创建rnd一个静态成员,并在静态ctonstructor中初始化它一次.
更新:这应该是所需要的:
static readonly protected Random rnd = new Random();
Run Code Online (Sandbox Code Playgroud)
(它也会更快,因为你只创建一个新的Random对象,而不是每个对象创建一次.从时钟创建种子相当慢.)