将3个字段插入字典以及如何检索它们

时间:2016-04-01 10:24:18

标签: c#-4.0

我试图在字典中插入三个字段,因此将两个字段转换为对象类型并添加到字典

public User AuthenticatedUser
{
    get
    {
        if (User.Identity.IsAuthenticated)
        {
            return usersManager.GetByEmail(User.Identity.Name);
        }

        return null;
    }
}

现在我正在尝试从字典中检索详细信息:

int empId;
String empName;
decimal salary;

public EmployeeClass(string empName,decimal salary)
{
    this.empName = empName;
    this.salary = salary;
}

//creating dictionary object
Dictionary<int, object> employeeDictionary = new Dictionary<int, object>();

EmployeeClass emp;

for(int i=0;i<5;i++)
{
    Console.WriteLine("Enter Employee " + (i+1) + " details ");
    Console.WriteLine("Enter Employee ID ");
    empId = Convert.ToInt32(Console.ReadLine());

    Console.WriteLine("Enter Employee Name ");
    empName = Console.ReadLine();

    Console.WriteLine("Enter Salary of the employee ");
    salary= Convert.ToDecimal(Console.ReadLine());

    //creating object for two fields
    emp= new  EmployeeClass(empName,salary);

    //adding to dictionary one is field and other object
    employeeDictionary.Add(empId, emp);
}

但是我收到了这个错误:

  

对象不包含empName的定义,并且没有扩展方法empName接受Object

类型的第一个参数

如何在给出对象类型时从字典中检索详细信息?

1 个答案:

答案 0 :(得分:0)

1。私人与公共领域

您的第一个问题是,您的媒体资源(empNamesalary)是<{1}}的私有字段:

EmployeeClass

您不使用显式访问修饰符,因此默认情况下您的字段是私有的。将其更改为:

public class EmployeeClass
{
    int empId;
    String empName;
    decimal salary;
    ...
}

2。使用正确的类型

如果要存储public class EmployeeClass { public int empId {get; private set;} public String empName {get; private set;} public decimal salary {get; private set;} ... } 的实例,为什么使用Dictionary<int,object>?只需使用

EmployeeClass

所以编译器会知道&#34;对象&#34;在字典中是Dictionary<int,EmployeeClass> employeeDirectory 并且会知道它的属性。如果使用EmployeeClass,则编译器无法知道是否存在这些属性。