类实例的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并将它移出了循环