I have
list<Employee> EmployeeList = new list<Employee>();
I want to be able to output the objects created. I have different types of employees. In this example, I used type Class Manager. After some user input, I end that option with
Employee newEmployee = new Employee(name, address);
newEmployee = new Manager(name, address, salary, bonus);
EmployeeList.Add(newEmployee);
If i try anything with console.writeline(EmployeeList)
I just get the namespace.(type of class) so in this case, mynamespace.Manager
I am familiar with list but not with using Classes as the key/parameter.
edit: Code isnt perfect, but the overall goal is to add Employees to a list and display them in order by name.
class Program
{
static void Main(string[] args)
{
List<Employee> EmployeeList = new List<Employee>();
bool loop = true;
while (loop)
{
Console.Clear();
Console.WriteLine("Main Menu");
Console.WriteLine("1. Add Employee");
Console.WriteLine("2. Remove Employee");
Console.WriteLine("3. Display Payroll");
Console.WriteLine("4. Exit");
Console.Write("Selection: ");
string input = Console.ReadLine().ToLower();
switch (input)
{
case "1":
case "add employee":
{
Console.WriteLine("Add Employee");
Console.WriteLine("1. Full Time");
Console.WriteLine("2. Part Time");
Console.WriteLine("3. Contractor");
Console.WriteLine("4. Salaried");
Console.WriteLine("5. Manager");
Console.WriteLine("6. Previous Menu");
Console.Write("Selection: ");
string choice = Console.ReadLine().ToLower();
if (choice.Contains("1") || choice.Contains("full time"))
{
Console.Write("\nEmployee Name: ");
string name = Console.ReadLine();
while (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("Must not be blank");
name = Console.ReadLine();
}
Console.Write("Employee Address: ");
string address = Console.ReadLine();
while (string.IsNullOrWhiteSpace(address))
{
Console.WriteLine("Must not be blank");
address = Console.ReadLine();
}
Console.Write("Employee Pay per Hour: ");
string pph = Console.ReadLine();
decimal payPerHour;
while (!decimal.TryParse(pph, out payPerHour))
{
Console.WriteLine("Must be a decimal");
pph = Console.ReadLine();
}
Employee newEmployee = new Employee(name, address);
newEmployee = new FullTime(name, address, payPerHour);
EmployeeList.Add(newEmployee);
Employee Class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TrevorMolano_Project_CE07
{
class Employee : IComparable<Employee>
{
string name;
string address;
public int CompareTo(Employee obj)
{
Employee person = obj;
return string.Compare(name, obj.name);
}
public virtual decimal CalculatePay(decimal _hpw, decimal _pph, decimal _nbb)
{
decimal hpw = _hpw;
decimal pph = _pph;
decimal answer;
answer = hpw * pph * 52;
return answer;
}
public Employee(string _name, string _address)
{
name = _name;
address = _address;
}
}
}
Yeah that's right since calling Console.Writeline()
directly like that calls the default ToString()
method which does what you have observe. What you have to do is loop through the list and display each object in it like
foreach(var item in EmployeeList)
{
console.writeline(item.name +"\t"+item.address);
}
Moreover, your EmployeeList
collection is of type Employee
as seen below
list<Employee> EmployeeList = new list<Employee>();
Then the below code block is invalid unless Manager
is of type Employee
Employee newEmployee = new Employee(name, address);
newEmployee = new Manager(name, address, salary, bonus);
EmployeeList.Add(newEmployee);