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

时间:2014-10-20 09:59:07

标签: c# model-view-controller changetype

我有一个空列表,其中包含'audi_b9_aismura'类型的模型,我希望用另一个列表中检索的对象填充该列表。

我知道这个对象属于指定的类型(audi_b9_aismura),但我不能将它添加到列表中,使用Convert.Changetype也不起作用。下面的代码抛出(在设计时)以下错误:无法从'object'转换为'.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)));
                    }

我也尝试过,这也不起作用。

audi_b9_aismura testVar = Convert.ChangeType(obj, typeof(audi_b9_aismura));

并且,将其转换为正常,但在添加时再说它是对象类型。

var testVar = Convert.ChangeType(obj, typeof(audi_b9_aismura));
dataList.Add(testVar);

如果我通过在字符串中填充它来检索对象类型,它将返回正确的类型(audi_b9_aismura)

string result = Convert.ChangeType(obj, typeof(audi_b9_aismura)).GetType().ToString();

3 个答案:

答案 0 :(得分:4)

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

if (obj is audi_b9_aismura)
{
    dataList.Add((audi_b9_aismura)obj);
}

正如本·罗宾逊在评论中所说,Convert.ChangeType()会返回一个object,但仍需要将其转换为正确的类型。

答案 1 :(得分:1)

尝试:

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

if (obj is audi_b9_aismura)
{
    dataList.Add((audi_b9_aismura)obj);
}

答案 2 :(得分:1)

LINQ提供Cast<>OfType<>方法,允许您分别按特定类型转换或过滤对象。

要将特定类型的项目检索为列表,您可以编写:

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

如果您确定源只包含特定类型的项目,您可以写:

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