gpt4 book ai didi

c# - 如何将一个 ViewModel 转换为另一个 ViewModel?

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:09 29 4
gpt4 key购买 nike

我有两个相似的 ViewModel,我需要将一个转换为另一个。

这是第一个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace TestInheritance.Models
{
public class ShowMatrixQuestionViewModel : ShowQuestionViewModel
{
public Dictionary<MatrixRows, List<MatrixColumns>> columnrow;
public List<MatrixColumns> columns;
public List<MatrixRows> rows;

public ShowMatrixQuestionViewModel()
{
columns = new List<MatrixColumns>();
rows = new List<MatrixRows>();
columnrow = new Dictionary<MatrixRows, List<MatrixColumns>>();
}
}

public class MatrixColumns
{
public int Column_ID { get; set; }
public int Column_Number { get; set; }
public String Column_Description { get; set; }
public Boolean IsAnswer { get; set; }
public int Procent { get; set; }
}

public class MatrixRows
{
public bool Delete { get; set; }
public int Row_Id { get; set; }
public String Row_Number { get; set; }
public String Row_Description { get; set; }
}

}

第二个看起来像这样:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace TestInheritance.Models.ViewModels.New
{
public class ShowMatrixProcentViewModel : ShowMatrixQuestionViewModel
{
// Dette er for at vi kan bruge DisplayTemplates
public ShowMatrixProcentViewModel()
: base()
{
}
}
}

当我尝试将 ShowMatrixQuestionViewModel 转换为 ShowMatrixProcentViewModel 时,出现 InvalidCastException:

MatrixColumns mc = new MatrixColumns()
{
Column_Description = "Hej",
Column_ID = 1,
Column_Number = 1,
IsAnswer = false
};

MatrixColumns mc2 = new MatrixColumns()
{
Column_Description = "Med",
Column_ID = 1,
Column_Number = 1,
IsAnswer = false
};

MatrixRows mr = new MatrixRows()
{
Row_Description = "2005",
Row_Id = 1,
Row_Number = "1"
};

MatrixRows mr2 = new MatrixRows()
{
Row_Description = "2008",
Row_Id = 1,
Row_Number = "2"
};

List<MatrixColumns> matrixcolumns = new List<MatrixColumns>();
matrixcolumns.Add(mc);
matrixcolumns.Add(mc2);
List<MatrixRows> matrixrows = new List<MatrixRows>();
matrixrows.Add(mr);
matrixrows.Add(mr2);

ShowMatrixQuestionViewModel avm = new ShowMatrixQuestionViewModel()
{
IsAnswered = true,
Question_ID = 1,
Question_Number = "1",
Question_Type = "hej",
Question_Wording = "spørgsmål1",
Visible = true,
columns = matrixcolumns,
rows = matrixrows
};

ShowMatrixProcentViewModel sm = (ShowMatrixProcentViewModel)avm;

return View(avm);

异常说明:

System.InvalidCastException:无法将“TestInheritance.Models.ShowMatrixQuestionViewModel”类型的对象转换为类型“TestInheritance.Models.ViewModels.New.ShowMatrixProcentViewModel”。

在转换之前我需要在 ShowMatrixProcentViewModel 中初始化一些东西吗??

提前致谢

最佳答案

由于 ShowMatrixProcentViewModel 继承自 ShowMatrixQuestionViewModel,您不能仅从 ShowMatrixQuestionViewModel 转换为 ShowMatrixProcentViewModel。这是基本的面向对象。只能在子类 > 父类(super class)方向进行转换。原因是 ShowMatrixQuestionViewModel 不包含 ShowMatrixProcentViewModel 所做的一切。

您可以使用类似 AutoMapper 的东西,但您可能应该看看您的设计/架构,因为这样的东西是结构不良的迹象。

关于c# - 如何将一个 ViewModel 转换为另一个 ViewModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7712519/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com