2011-02-10 6 views
-2

私は次のコードインタフェース

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

これは2つのレコードを返すがありキャスティング。しかし、私は次のキャストを試みた。私には記録がありません。

 var myentities = distributionUnits as List<IEntity>; 

このようなキャストは可能ですか?

さらなる情報。あなたのdistributionUnitsを想定し

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



public class DistributionUnit : IEntity 
{ 

    public virtual string Name { get; set; } 

} 
+4

言いたいの? –

答えて

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

はIEntityまたは継承するかIEntityを実装してどちらか何かのどちらかです。

+0

downvoteの理由は? –

+0

それは私ではなかったが、私は理由は、あなたが実際にdistributionUnitsの種類を知らなくてもコードを書いたことだと思う、これはちょうど – Andrey

+0

おかげユーリーを推測され、コメントの – frosty

2

これは、2つのレコードを返します。しかし、私は次のキャストを試みた。私には記録がありません。

var myentities = distributionUnits as List<IEntity>; 

可能キャストのこの種のですか?

返品の種類はDistributionUnitRepository.FindByCompanyIdではありませんが、おそらくそうではありません。戻り値の型がList<DistributionUnit>であるとしましょう。あなたがそのキャストを作ることができれば、次のことが可能になります:

class EvilEntity : IEntity { } 

myentities.Add(new EvilEntity()); 

、今あなただけ明確に不合理であるあなたのリストList<DistributionUnit>EvilEntityのインスタンスを追加しました。さらに

DistributionUnitRepository.FindByCompanyIdの戻り値の型は、その後の進路キャストは不可能で、でもList<DistributionUnit>ではありませんが、言って、ただyield編ですIEnumerable<DistributionUnit>場合。 FindByCompanyIdの署名は何である:

はおそらく、あなたが実際に役立つだろう、さらに情報を忘れてしまった

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

感謝:)上のスポットは、yurifは最初のキャストだと思います。だけでなく、正しい+1 – frosty

+1

@frosty:あなたは指定されたキャストが可能であったか否かの質問をし、さらにはその質問に対応していませんでした答えを選択したが、ちょうどあなたの回避策を与えたことに注意してください。 – jason