2014-10-20 57 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