c#从对象类型转换为模型类型

c#从对象类型转换为模型类型,c#,model-view-controller,changetype,C#,Model View Controller,Changetype,我有一个空列表,其中包含“audi_b9_Aimura”类型的模型,我想用从另一个列表中检索的对象填充该模型 我知道该对象属于指定的类型(audi_b9_Aimura),但我无法使用Convert将其添加到列表中。Changetype也不起作用。以下代码(在设计时)引发以下错误:无法从“对象”转换为“.audi_B9_aismura” List<audi_b9_aismura> dataList = new List<audi_b9_aismura>(); if (ob

我有一个空列表,其中包含“audi_b9_Aimura”类型的模型,我想用从另一个列表中检索的对象填充该模型

我知道该对象属于指定的类型(audi_b9_Aimura),但我无法使用Convert将其添加到列表中。Changetype也不起作用。以下代码(在设计时)引发以下错误:无法从“对象”转换为“.audi_B9_aismura”

List<audi_b9_aismura> dataList = new List<audi_b9_aismura>();

if (obj.GetType().Equals(typeof(audi_b9_aismura)))
                    {
                        dataList.Add(Convert.ChangeType(obj, typeof(audi_b9_aismura)));
                    }
并且,它转换为ok,但当再次添加它时,表示它是object类型

var testVar = Convert.ChangeType(obj, typeof(audi_b9_aismura));
dataList.Add(testVar);
如果我通过在字符串中填充来检索对象类型,它将返回正确的类型(audi_b9_aismura)


为什么不做一个简单的演员阵容:

if (obj is audi_b9_aismura)
{
    dataList.Add((audi_b9_aismura)obj);
}
正如Ben Robinson在他的评论中所说,
Convert.ChangeType()
返回一个仍然必须转换为正确类型的
对象。

尝试:

List<audi_b9_aismura> dataList = new List<audi_b9_aismura>();

if (obj is audi_b9_aismura)
{
    dataList.Add((audi_b9_aismura)obj);
}
List dataList=newlist();
如果(obj是奥迪b9爱斯穆拉)
{
数据列表。添加((奥迪b9_Aimura)obj);
}
LINQ提供了和方法,允许您分别按特定类型强制转换或筛选对象

要以列表形式检索特定类型的项,您可以编写:

var dataList=sourceList.OfType<audi_b9_aismura>().ToList();
var dataList=sourceList.Cast<audi_b9_aismura>().ToList();
var-dataList=sourceList.OfType().ToList();
如果确定源仅包含特定类型的项,则可以编写:

var dataList=sourceList.OfType<audi_b9_aismura>().ToList();
var dataList=sourceList.Cast<audi_b9_aismura>().ToList();
var-dataList=sourceList.Cast().ToList();

好吧,那就行了!谢谢然而,我不明白为什么将其转换为其他类型不起作用,但这确实起作用。有人愿意解释吗?这很有道理,但遗憾的是,通过定义要转换的自定义类型,它并没有真正转换为自定义类型。编辑:哦,你删除了你的评论…是的,这不是因为这个,而是因为Ben Robinson在他的评论中说的。LINQ已经提供了强制转换和OfType运算符,不需要创建临时列表或进行类型检查和强制转换。
Convert.ChangeType()
返回一个对象,你仍然需要将其强制转换为正确的类型,由于在这种情况下只需执行强制转换,
Convert.ChangeType
没有任何作用。如果您只想将项目从一种类型强制转换为另一种类型,可以使用LINQ的强制转换或OfType运算符。我觉得奇怪的是,字符串结果中填充了正确的类型。我不熟悉C#编程,所以我可能理解错了,但是如果我从“对象”中检索类型,并将其设置为我想要的类型(audi_b9_aismura),当我尝试用它填充变量时,它为什么没有真正设置为类型?