C# 创建未知类型的实例并使用它

C# 创建未知类型的实例并使用它,c#,asp.net-mvc,types,C#,Asp.net Mvc,Types,在MVC中,我有一个控制器来检查经过身份验证的用户的角色。根据角色及其创建类实例的需要。例如,如果角色是学生,我需要创建一个学生类的实例。我一直在尝试类似的方法,但不起作用: private object CurrentUser; switch(Role) { case "student": CurrentUser = context.Students.FirstOrDefault(std => std.UserId == WebSecurity.CurrentUserId)

在MVC中,我有一个控制器来检查经过身份验证的用户的角色。根据角色及其创建类实例的需要。例如,如果角色是学生,我需要创建一个学生类的实例。我一直在尝试类似的方法,但不起作用:

private object CurrentUser;

switch(Role)
{
   case "student":
   CurrentUser = context.Students.FirstOrDefault(std => std.UserId == WebSecurity.CurrentUserId);
   break;
   .
   .
   .
}
但我无法获取定义的学生属性。例如,当我想要获取CurrentUser时,没有这样的firstname属性可用!
我怎样才能植入当前用户

您已将CurrentUser定义为类型对象。它将不会具有Student的属性,除非您将其强制转换

private object CurrentUser;
您可以使用接口或公共基类,例如

public class Person
{
    public string FirstName { get; set; }
}

public class Student : Person
{
    // Add special properties for students
}

public class Professor : Person
{
    // Add special properties for professors
}
然后使用

private Person CurrentUser;
Person可用的所有属性都将在CurrentUser上可用。如果您需要访问仅在Student上的属性,可以按如下方式进行强制转换:

((Student)CurrentUser).SomePropertyOfStudent

不清楚为什么有4个人投票决定关闭,因为不清楚你在问什么。他正在将Student的一个实例分配给object类型的变量,不理解Student的属性为何不可用。谢谢Eric。我还使用Student类作为使用数据库的第一个代码。使用基类不会影响我的数据库?EF代码首先完全支持基类或整个类层次结构。看见