C# 运行FOR循环,从默认构造函数c创建4个水管工#

C# 运行FOR循环,从默认构造函数c创建4个水管工#,c#,C#,正如您在上面的标题中看到的,我需要运行FOR循环,从默认构造函数创建4个水管工。创建后(在FOR循环中),更改其名称,将其添加到员工列表并显示在列表框中。所以基本上,水管工实际上是在另一个叫做EmployeeList的类中声明的列表。Wehn我试着把他们的名字改成随机的,我得到了一个错误消息,说“索引超出范围”。有人能帮我吗 表格代码 public partial class Form1 : Form { public Form1() { InitializeCo

正如您在上面的标题中看到的,我需要运行FOR循环,从默认构造函数创建4个水管工。创建后(在FOR循环中),更改其名称,将其添加到员工列表并显示在列表框中。所以基本上,水管工实际上是在另一个叫做EmployeeList的类中声明的列表。Wehn我试着把他们的名字改成随机的,我得到了一个错误消息,说“索引超出范围”。有人能帮我吗

表格代码

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    //create class-level employee list 
    EmployeeList plumbers = new EmployeeList();

    private void Form1_Load(object sender, EventArgs e)
    {
        //run a for loop to create 4 plumbers from the default constructor.
        for (int i = 0; i < plumbers.Count; i++)
            plumbers[i] = new Employee();

        //After they are created (within the FOR loop), change their names, 
        //plumbers[0].Name = "Nicole Fernandez";

        //add them to the employee list  

        //display in listbox
        foreach (Employee item in plumbers.Employees)
        { 
            lstDisplay.Items.Add(item.DisplayData());
        }
    }
class EmployeeList
{
    //use private access modifier to create a list of employee
    private List<Employee> employees = new List<Employee>();

    public List<Employee> Employees
    {
        get { return employees; }
        set { employees = value; }
    }

    //return the count of the employee list, use lambda operator
    public int Count => employees.Count();

    //create default constructor
    public EmployeeList() { }

    //create a method that adds employee sent to the list. No return value
    public void AddEmp(Employee emp)
    {
        employees.Add(emp);//add employee to the list
    } 

    //create employee from data sent. No return value
    public void AddEmp(string inName, int inID, decimal inHourlyWage)
    {
        //declare a variable
        Employee emp = new Employee(inName, inID, inHourlyWage);
        //call the other AddEmp
        AddEmp(emp);
    }

    //create a method that deletes employee from the list. No return value
    public void DeleteEmp(Employee emp) => employees.Remove(emp);

    //insert employee at the index
    public void InsertEmp(Employee emp, int index) => employees.Insert(index, emp);

    //create an indexer
    public Employee this[int i]
    { //q12 - indexer property with exception
        get
        {
            if (i < 0 || i >= Count)
                throw new ArgumentOutOfRangeException(i.ToString());
            return employees[i];
        }
        set { employees[i] = value; }
    }

}
class Employee
{
    //use auto-implemented property
    public int ID { get; set; }
    public string Name { get; set; }
    public decimal HourlyWage { get; set; }
    public decimal TotalPay { get; set; }

    //create static integer that starts at 1
    private static int NextID = 1;

    //create a default constructor with default values
    public Employee()
    {
        ID = NextID++;
        Name = "John Doe";
        HourlyWage = 15.25m;
        TotalPay = 0.0m;
    }

    //create the custom constructor sending in 3 parameters
    public Employee(string inName, int inID, decimal inHourlyWage)
    {
        Name = inName;//set name, no validation is required

        //validate ID is between 1 and 250. if not, set to nextID available
        if (inID <= 1 && inID >= 250)
            NextID = inID;

        //validate hourly wage is between 12.50 and 20. If not, set to 15.25
        if (inHourlyWage <= 12.50m && inHourlyWage >= 20.0m)
            inHourlyWage = 15.25m;

        TotalPay = 0;//set total pay to 0
    }

    public string DisplayData() => ID + "\t" + Name + "\t" + HourlyWage.ToString("c") + "\t" + TotalPay.ToString("c");
}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
}
//创建班级级员工列表
EmployeeList水管工=新EmployeeList();
私有void Form1\u加载(对象发送方、事件参数e)
{
//运行for循环,从默认构造函数创建4个水管工。
对于(int i=0;i
员工名单类别代码

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    //create class-level employee list 
    EmployeeList plumbers = new EmployeeList();

    private void Form1_Load(object sender, EventArgs e)
    {
        //run a for loop to create 4 plumbers from the default constructor.
        for (int i = 0; i < plumbers.Count; i++)
            plumbers[i] = new Employee();

        //After they are created (within the FOR loop), change their names, 
        //plumbers[0].Name = "Nicole Fernandez";

        //add them to the employee list  

        //display in listbox
        foreach (Employee item in plumbers.Employees)
        { 
            lstDisplay.Items.Add(item.DisplayData());
        }
    }
class EmployeeList
{
    //use private access modifier to create a list of employee
    private List<Employee> employees = new List<Employee>();

    public List<Employee> Employees
    {
        get { return employees; }
        set { employees = value; }
    }

    //return the count of the employee list, use lambda operator
    public int Count => employees.Count();

    //create default constructor
    public EmployeeList() { }

    //create a method that adds employee sent to the list. No return value
    public void AddEmp(Employee emp)
    {
        employees.Add(emp);//add employee to the list
    } 

    //create employee from data sent. No return value
    public void AddEmp(string inName, int inID, decimal inHourlyWage)
    {
        //declare a variable
        Employee emp = new Employee(inName, inID, inHourlyWage);
        //call the other AddEmp
        AddEmp(emp);
    }

    //create a method that deletes employee from the list. No return value
    public void DeleteEmp(Employee emp) => employees.Remove(emp);

    //insert employee at the index
    public void InsertEmp(Employee emp, int index) => employees.Insert(index, emp);

    //create an indexer
    public Employee this[int i]
    { //q12 - indexer property with exception
        get
        {
            if (i < 0 || i >= Count)
                throw new ArgumentOutOfRangeException(i.ToString());
            return employees[i];
        }
        set { employees[i] = value; }
    }

}
class Employee
{
    //use auto-implemented property
    public int ID { get; set; }
    public string Name { get; set; }
    public decimal HourlyWage { get; set; }
    public decimal TotalPay { get; set; }

    //create static integer that starts at 1
    private static int NextID = 1;

    //create a default constructor with default values
    public Employee()
    {
        ID = NextID++;
        Name = "John Doe";
        HourlyWage = 15.25m;
        TotalPay = 0.0m;
    }

    //create the custom constructor sending in 3 parameters
    public Employee(string inName, int inID, decimal inHourlyWage)
    {
        Name = inName;//set name, no validation is required

        //validate ID is between 1 and 250. if not, set to nextID available
        if (inID <= 1 && inID >= 250)
            NextID = inID;

        //validate hourly wage is between 12.50 and 20. If not, set to 15.25
        if (inHourlyWage <= 12.50m && inHourlyWage >= 20.0m)
            inHourlyWage = 15.25m;

        TotalPay = 0;//set total pay to 0
    }

    public string DisplayData() => ID + "\t" + Name + "\t" + HourlyWage.ToString("c") + "\t" + TotalPay.ToString("c");
}
class员工列表
{
//使用私有访问修饰符创建员工列表
私有列表员工=新列表();
公开名单雇员
{
获取{返回员工;}
设置{employees=value;}
}
//返回员工列表的计数,使用lambda运算符
public int Count=>employees.Count();
//创建默认构造函数
公共雇员列表(){}
//创建将发送的员工添加到列表的方法。无返回值
公共无效增编(员工emp)
{
employees.Add(emp);//将员工添加到列表中
} 
//根据发送的数据创建员工。无返回值
public void addamp(名称中的字符串、inID中的整数、inHourlyWage中的小数)
{
//声明一个变量
员工emp=新员工(inName、inID、inHourlyWage);
//调用另一个加法器
加法器(emp);
}
//创建从列表中删除员工的方法。无返回值
public void DeleteEmp(emp)=>employees.Remove(emp);
//在索引处插入雇员
public void InsertEmp(Employee emp,int index)=>employees.Insert(index,emp);
//创建索引器
公共雇员本[int i]
{//q12-索引器属性,有异常
得到
{
如果(i<0 | | i>=计数)
抛出新ArgumentOutOfRangeException(i.ToString());
返回员工[i];
}
设置{employees[i]=value;}
}
}
员工类别代码

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    //create class-level employee list 
    EmployeeList plumbers = new EmployeeList();

    private void Form1_Load(object sender, EventArgs e)
    {
        //run a for loop to create 4 plumbers from the default constructor.
        for (int i = 0; i < plumbers.Count; i++)
            plumbers[i] = new Employee();

        //After they are created (within the FOR loop), change their names, 
        //plumbers[0].Name = "Nicole Fernandez";

        //add them to the employee list  

        //display in listbox
        foreach (Employee item in plumbers.Employees)
        { 
            lstDisplay.Items.Add(item.DisplayData());
        }
    }
class EmployeeList
{
    //use private access modifier to create a list of employee
    private List<Employee> employees = new List<Employee>();

    public List<Employee> Employees
    {
        get { return employees; }
        set { employees = value; }
    }

    //return the count of the employee list, use lambda operator
    public int Count => employees.Count();

    //create default constructor
    public EmployeeList() { }

    //create a method that adds employee sent to the list. No return value
    public void AddEmp(Employee emp)
    {
        employees.Add(emp);//add employee to the list
    } 

    //create employee from data sent. No return value
    public void AddEmp(string inName, int inID, decimal inHourlyWage)
    {
        //declare a variable
        Employee emp = new Employee(inName, inID, inHourlyWage);
        //call the other AddEmp
        AddEmp(emp);
    }

    //create a method that deletes employee from the list. No return value
    public void DeleteEmp(Employee emp) => employees.Remove(emp);

    //insert employee at the index
    public void InsertEmp(Employee emp, int index) => employees.Insert(index, emp);

    //create an indexer
    public Employee this[int i]
    { //q12 - indexer property with exception
        get
        {
            if (i < 0 || i >= Count)
                throw new ArgumentOutOfRangeException(i.ToString());
            return employees[i];
        }
        set { employees[i] = value; }
    }

}
class Employee
{
    //use auto-implemented property
    public int ID { get; set; }
    public string Name { get; set; }
    public decimal HourlyWage { get; set; }
    public decimal TotalPay { get; set; }

    //create static integer that starts at 1
    private static int NextID = 1;

    //create a default constructor with default values
    public Employee()
    {
        ID = NextID++;
        Name = "John Doe";
        HourlyWage = 15.25m;
        TotalPay = 0.0m;
    }

    //create the custom constructor sending in 3 parameters
    public Employee(string inName, int inID, decimal inHourlyWage)
    {
        Name = inName;//set name, no validation is required

        //validate ID is between 1 and 250. if not, set to nextID available
        if (inID <= 1 && inID >= 250)
            NextID = inID;

        //validate hourly wage is between 12.50 and 20. If not, set to 15.25
        if (inHourlyWage <= 12.50m && inHourlyWage >= 20.0m)
            inHourlyWage = 15.25m;

        TotalPay = 0;//set total pay to 0
    }

    public string DisplayData() => ID + "\t" + Name + "\t" + HourlyWage.ToString("c") + "\t" + TotalPay.ToString("c");
}
class员工
{
//使用自动实现的属性
公共int ID{get;set;}
公共字符串名称{get;set;}
公共十进制小时数{get;set;}
公共十进制TotalPay{get;set;}
//创建从1开始的静态整数
私有静态int NextID=1;
//使用默认值创建默认构造函数
公职人员()
{
ID=NextID++;
Name=“约翰·多伊”;
小时里程=15.25m;
总工资=0.0m;
}
//创建自定义构造函数并发送3个参数
public Employee(名称中的字符串、整数、小数)
{
Name=inName;//设置名称,不需要验证
//验证ID介于1和250之间。如果不是,则设置为nextID available
如果(inID=250)
NextID=inID;
//验证小时工资是否介于12.50和20之间。如果不是,则设置为15.25
如果(室内尺寸=20.0m)
室内尺寸=15.25m;
TotalPay=0;//将TotalPay设置为0
}
公共字符串DisplayData()=>ID+“\t”+Name+“\t”+HourlyWage.ToString(“c”)+“\t”+TotalPay.ToString(“c”);
}

首先,如果要使用循环创建一个包含4名管道工的列表,则需要循环迭代4次。这通常是通过将初始计数器值设置为0,然后在小于所需数量时循环来完成的:

for (int i = 0; i < 4; i++)
由于似乎没有任何公共方法来更新现有的水管工,我们可以直接访问
员工
列表来重命名水管工。有两种方法可以做到这一点。一种是使用循环,并在名称中使用循环计数器的一部分:

// After they are created (within the FOR loop), change their names 
for(int i = 0; i < plumbers.Employees.Count; i++)
{
    plumbers.Employees[i].Name = string.Format("Plumber #{0}", i); 
}
或者,如果你真的想成为一个花花公子,你可以生成一个名字列表(我从中提取了这些名字),然后为每个水管工从列表中随机抽取一个名字并分配它(然后从列表中删除它,这样水管工都有唯一的名字):

//在创建它们之后(在FOR循环中),更改它们的名称
//生成一个名称列表
var namepardidates=新列表
{
“奥利维亚”、“阿米莉亚”、“夏洛特”、“艾娃”、“艾拉”、“阿拉贝拉”、“极光”,
“阿德琳”,“佩内洛普”,“埃莉诺”,“以斯拉”,“亚舍”,“阿提库斯”,
“德克兰”、“奥利弗”、“塞拉斯”、“米洛”、“利维”、“亨利”、“怀亚特”
};
//循环遍历每个水管工,并随机选择一个名称
var rnd=新随机数();
foreach(管道工中的var管道工。员工)
{
//选择一个随机名称,分配该名称,然后将其从候选名称中删除
var nameIndex=rnd.Next(nameCandidates.Count);
plumber.Name=姓名候选人[姓名索引];
namePendidates.RemoveAt(nameIndex);
}

for
到达第一个
时,列表是空的。计数为零,因此
for
将不会执行。下一个语句尝试访问一个不存在的元素,因为列表也是空的。@MarkLarter那么我如何执行它,正如问题所说,我必须运行一个for循环,创建4个水管工,并在t之后更改他们的名称hat..参见答案。您只需要使要添加项的循环运行固定次数,而不是使用限制作为开始时为零的计数