类实例的C#数组

类实例的C#数组,c#,arrays,class,C#,Arrays,Class,在这里,我试图获取许多员工的数据,我为此预定义了一个类,如下所示 public class Employee { public int code; public float salary; public float bonus; public float deduction; } 我试图创建一个函数来为员工创建数组,并要求用户填充它 这就是现在的代码 using System; using System.Collections.Generic; using Sy

在这里,我试图获取许多员工的数据,我为此预定义了一个类,如下所示

public class Employee
{
    public int code;
    public float salary;
    public float bonus;
    public float deduction;
}
我试图创建一个函数来为员工创建数组,并要求用户填充它

这就是现在的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Task3
{
    class Program
    {
        static void Main(string[] args)
        {
            int size = 3;
            Employee[] E1 = GetEmployeeData(size);

        }

        static Colors GetIntFromUser(string Message)
        {
            int result;
            Console.Write(Message);
            result = int.Parse(Console.ReadLine());
            Colors c = (Colors)result;
            return c;
        }
        static Employee[] GetEmployeeData(int size)
        {
            for (int i = 0; i < size; i++)
            {
                Employee[] E = new Employee [size];
                E[i] = new Employee();
                Console.Write("Code: ");
                E[i].code = int.Parse(Console.ReadLine());
                Console.Write("Salary: ");
                E[i].salary = float.Parse(Console.ReadLine());
                Console.Write("Bonus: ");
                E[i].bonus = float.Parse(Console.ReadLine());
                Console.Write("Deduction: ");
                E[i].deduction = float.Parse(Console.ReadLine());
                return E[i];
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
命名空间任务3
{
班级计划
{
静态void Main(字符串[]参数)
{
int size=3;
Employee[]E1=GetEmployeeData(大小);
}
静态颜色GetIntFromUser(字符串消息)
{
int结果;
控制台。写入(消息);
result=int.Parse(Console.ReadLine());
颜色c=(颜色)结果;
返回c;
}
静态员工[]GetEmployeeData(整数大小)
{
对于(int i=0;i
我得到了错误严重性代码描述项目文件行抑制状态 错误CS0161“Program.GetEmployeeData(int)”:并非所有代码路径都返回值Task3 E:\ITI39\programming\tasks\day5\ConsoleApplication1\Task3\Program.cs 26 Active

而这一个太过严重的代码描述项目文件行抑制状态 错误CS0029无法将类型“Task3.Employee”隐式转换为“Task3.Employee[]”Task3 E:\ITI39\programming\tasks\day5\ConsoleApplication1\Task3\Program.cs 40 Active


p.S.我没有任何OOP经验,而且我是编程新手

您可以使用迭代器返回员工。这使您能够对结果进行流式处理

static IEnumerable<Employee> GetEmployeeData(int size)
{
    for (int i = 0; i < size; i++)
    {
        Employee e = new Employee();
        Console.Write("Code: ");
        e.code = int.Parse(Console.ReadLine());
        Console.Write("Salary: ");
        e.salary = float.Parse(Console.ReadLine());
        Console.Write("Bonus: ");
        e.bonus = float.Parse(Console.ReadLine());
        Console.Write("Deduction: ");
        e.deduction = float.Parse(Console.ReadLine());
        yield return e;
    }
}
静态IEnumerable GetEmployeeData(int size)
{
对于(int i=0;i
您看到的第一个错误是由于您只在循环内返回一个值-如果大小为0,则循环将不会执行,因此不会返回任何值。 第二个错误是因为您试图在每个循环结束时返回数组的单个部分。您需要在循环完成后返回整个数组,而不是写入

return E[i];
你应该写

return E;
这应该在循环结束后写入,一旦您收到所有3个条目

但是,在每次循环迭代时创建“E”变量时,这里还有其他问题,因此需要在循环开始之前将“E”的声明移动到,否则结果将只在索引2处包含有效对象。 整个修正函数如下所示:

static Employee[] GetEmployeeData(int size)
{
    Employee[] E = new Employee [size];
    for (int i = 0; i < size; i++)
    {
        E[i] = new Employee();
        Console.Write("Code: ");
        E[i].code = int.Parse(Console.ReadLine());
        Console.Write("Salary: ");
        E[i].salary = float.Parse(Console.ReadLine());
        Console.Write("Bonus: ");
        E[i].bonus = float.Parse(Console.ReadLine());
        Console.Write("Deduction: ");
        E[i].deduction = float.Parse(Console.ReadLine());
    }

    return E;
}
静态员工[]GetEmployeeData(整数大小)
{
员工[]E=新员工[人数];
对于(int i=0;i

您可能还想考虑如果用户要输入一个不能解析为预期类型的值,并对此进行防御代码会发生什么,那么请查看TyPARSE函数。您正在

for
循环中创建一个数组(意味着您在每次迭代中创建一个新的数组),并且还尝试使用
return E[i]返回单个实例
(也在
for
循环中,这意味着如果编译此循环,您将只进行一次迭代),如@UnholySheep所说,您需要在循环之外创建数组,否则您总是丢弃旧的数组。您的方法签名声明您返回一个Employee[],即Employee数组。然而,E[i]只是一名员工。显然这不匹配。因此,您需要返回E本身,也在数组外部,否则您将从第一个循环中的方法返回。@如果我将它移到循环外部,并且错误仍然存在,那么将return语句从循环底部移出,编译器“不够聪明”,无法理解它是否保证运行。另外,您可能希望
返回E谢谢,伙计们,我让函数返回E并将它移出了循环