从动态类型中获取实际模型类型

Get actual model type from dynamic type

我的数据库中有三个 table(学生、课程、全部)。当我在 Student & Course table 中添加任何数据时,数据也会添加到 All table.

因此,我正在使用 动态 类型数据来传递学生和课程类型数据以保存在所有 table.

public IActionResult Add(Student model) 
{   ... 
 bool studentData = _studentService.Add(model); //saving in Student table 
 bool allData= _allService.AddAll(model); // passing 'Student' type data 
   ... 
}

在 All 服务中,我有一个像这样的函数-

public bool AddAll(dynamic model) // 'Student' type data passed & received as dynamic 
{...}

现在,我需要有关 Student 模型类型的详细信息(table 名称、找到的总数据等)。

有什么办法可以得到吗?如果我使用动态数据类型,是否可以获取学生或课程模型类型信息?

如有任何建议或帮助,我们将不胜感激 :) 在此先致谢!

此示例是否演示了您要执行的操作?

// Some dummy classes
public class Student
{
    public string Name { get; set; }

    public Student(string name)
    {
        Name = name;
    }
}

public class Course
{
    public string Title { get; set; }

    public Course(string title)
    {
        Title = title;
    }
}

// put the method somewhere
private string TypeCasting(dynamic myContent)
{
    if (myContent is Student littleStudent)
    {
        return littleStudent.Name;
    }
            
    if (myContent is Course someLovelyCourse)
    {
        return someLovelyCourse.Title;
    }

    return string.Empty;
}

// Example using
var student = TypeCasting(new Student("fossil"));
var course = TypeCasting(new Course("type casting"));

如果你想获取模型类型,你可以使用model.GetType(),你可以使用model.GetType().Name获取模型类型名称,这里是一个演示:

型号:

public class Student
    {
        public int StudentId { get; set; }
        public string StudentName { get; set; }

    }

    public class Course
    {
        public int CourseId { get; set; }
        public string CourseName { get; set; }

    }

操作:

public void Add(Student model)
        {
            //Student s = new Student { StudentId=1, StudentName="s1" };
            Course c = new Course { CourseId=1,CourseName="c1" };
            bool allData = AddAll(c);
        }
        public bool AddAll(dynamic model)
        {
            var type = model.GetType();
            var typeName = type.Name;
            return true;
        }

结果: