2014-10-20 68 views
1

我有一个空的列表与模型的类型'audi_b9_aismura',我想填充一个对象,我从另一个列表中检索。c#从对象转换为模型类型

我知道这个对象是指定的类型(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(); 
+0

'Convert.ChangeType()'返回一个对象,你仍然需要将它转换为正确的类型,因为在这种情况下,转换是你所需要做的,'Convert.ChangeType'没有任何用处。 – 2014-10-20 10:09:26

+0

如果你只是想将项目从一种类型转换为另一种类型,你可以使用LINQ的Cast <>或OfType <>运算符 – 2014-10-20 10:19:25

+0

我觉得很奇怪,字符串结果被填充了正确的类型。我是C#编程的新手,所以可能我错误地理解了,但是如果我从“对象”中获取类型并将其设置为我想要的类型(audi_b9_aismura),那么如何才能将其设置为类型我尝试用它填充一个变量? – DaGrooveNL 2014-10-20 10:30:46

回答

4

为什么不能做一个简单的转换:

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

由于本罗宾逊在他的评论中说,Convert.ChangeType()返回一个object仍然必须铸造到正确的类型。

+0

那么,那有效!谢谢!但是,我不明白为什么将其转换为其他类型不起作用,但这确实如此。任何人都在意解释? – DaGrooveNL 2014-10-20 10:04:25

+0

有道理,但通过定义要转换为的自定义类型,它并不真正转换为自定义类型,这是一种耻辱。编辑:哦,你删除了你的评论... – DaGrooveNL 2014-10-20 10:11:01

+0

是的,这不是来自那个,而是从本罗宾逊在他的评论中说。 – 2014-10-20 10:12:28

1

尝试:

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

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

LINQ提供Cast<>OfType<>方法,允许你通过speficic类型分别铸造或过滤器对象。

检索特定类型的列表中的项目,你可以这样写:

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

如果您是确保源包含特定类型的唯一项目,你可以写:

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

当然,你是对的。 +1 – 2014-10-20 10:24:11

相关问题