铸造界面

时间:2011-02-10 15:22:34

标签: c# .net-4.0

我有以下代码

  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; }

}

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

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

假设您的distributionUnits是IEntity或者是继承或实现IEntity的东西。