C#类实例的数组

时间:2018-10-14 20:57:34

标签: c# arrays class

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

from imgutils import imshow

并且我正在尝试创建一个函数来为雇员创建数组并要求用户填充

现在是代码

from matplotlib.pyplot import imshow

我得到该错误严重级别说明项目文件行抑制状态 错误CS0161'Program.GetEmployeeData(int)':并非所有代码路径都返回值Task3 E:\ ITI39 \ Programming \ tasks \ day5 \ ConsoleApplication1 \ Task3 \ Program.cs简介26有效

并且这个也是严重性代码说明项目文件行抑制状态 错误CS0029无法将类型'Task3.Employee'隐式转换为'Task3.Employee []'Task3 E:\ ITI39 \ Introduction to programming \ tasks \ day5 \ ConsoleApplication1 \ Task3 \ Program.cs 40活动

PS 。我没有任何OOP经验,我是编程初学者

2 个答案:

答案 0 :(得分:2)

您看到的第一个错误是由于您仅在循环内部返回了一个值-如果size为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;
}

您可能还想考虑如果用户输入无法解析为期望类型的值并为此防御性地编写代码,那么请看一下TryParse函数。

答案 1 :(得分:1)

您可以使用Iterator并让雇员回酬。这使您可以流式传输结果。

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;
    }
}