2011-02-10 59 views
-2

我有以下代碼鑄造界面

var distributionUnits = _distributionUnitRepository.FindByCompanyId(userSession.CompanyId); 

這將返回2個記錄。但是,當我嘗試下面的演員。我沒有記錄。

 var myentities = distributionUnits as List<IEntity>; 

這樣的演員可能嗎?

更多信息。

public interface IEntity 
    { 
     string Name { get; set; } 
    } 



public class DistributionUnit : IEntity 
{ 

    public virtual string Name { get; set; } 

} 
+4

你忘了進一步的信息,將真正幫助:什麼是FindByCompanyId的簽名? – 2011-02-10 15:24:28

回答

1
var myentities = distributionUnits.Cast<IEntity>().ToList(); 

假設你distributionUnits要麼IEntity或東西,無論是繼承或實現IEntity。

+0

downvote的原因? – 2011-02-10 15:44:34

+0

它不是我,但我認爲原因是你寫代碼沒有真正知道distributionUnits的類型,這只是猜測 – Andrey 2011-02-10 16:09:28

2

這將返回2條記錄。但是,當我嘗試下面的演員。我沒有記錄。

var myentities = distributionUnits as List<IEntity>; 

就是這種鑄造的可能嗎?

那麼,你還沒有告訴我們返回類型DistributionUnitRepository.FindByCompanyId,但可能不是。你看,假設返回類型是List<DistributionUnit>。如果你能有這樣的演員陣容,以下是可能的:

class EvilEntity : IEntity { } 

myentities.Add(new EvilEntity()); 

,現在你剛剛添加的EvilEntity一個實例到列表List<DistributionUnit>這顯然是荒謬的。

此外,如果DistributionUnitRepository.FindByCompanyId返回類型甚至不是一個List<DistributionUnit>,而是說,IEnumerable<DistributionUnit>這只是yield版,那當然演員是不可能的。

你可能想說

var myentitites = distributionUnits.Cast<IEntity>().ToList();