2016-09-27 1 views
0

現在、別のコレクションにインターフェイスのコレクションを追加しようとしています。問題は、拡張インターフェイスのみで、親は不要です。C#リストに拡張インターフェイスを追加する

は私が詳しく説明してみましょう:

interface IScanner 
{ 
    void scan(); 
} 

interface IPhotocopier : IScanner 
{ 
    void Copy(); 
} 

public class PrintingBusiness 
{ 
    List<IPhotocopier> Photocopiers { get; set; } 
} 

public class ScannerBusiness 
{ 
    List<IScanner> Scanners { get; set; } 
} 

public class Program 
{ 
     static void Main(string[] args) 
     { 
      PrintingBusiness printerBusiness = new PrintingBusiness(); 
      printerBusiness.Photocopiers = new List<IPhotocopier>(); 
      printerBusiness.Photocopiers.Add(new HPPrinter()); 
      printerBusiness.Photocopiers.Add(new CanonPrinter()) 

      ScannerBusiness scannerBusiness = new ScannerBusiness(); 
      scannerBusiness.Scanners = new List<IScanner>(); 
      scannerBusiness.Scanners.Add(printerBusiness.Photocopiers); // Here i want to retreive all the IScanners from my Photocopiers collection, but i get an ArgumentError: Cannot Convert from List<IPhotocopier> to List<IScanner>. 

     } 
} 

私は私の複写機コレクションからIScannerインタフェースのコレクションにアクセスしたい - 私は単に私のスキャナコレクションに複写機のコレクションを追加することにより、直接それを行うことができると思った - しかし、私に各コピー機で繰り返し、IScannerにキャストして、それらをスキャナコレクションに追加する必要がありますか?

答えて

3

:-)それはPhotocopiersリストを反復処理し、Scannersリストにすべてのこれらの項目を追加することができますので、あなたは、AddRangeメソッドを使用する必要があります。

scannerBusiness.Scanners.AddRange(printerBusiness.Photocopiers); 

あなたはIPhotocopierインスタンスから任意の変換を必要としません暗黙的にIScannerにキャストすることができます。

また、リストを初期化することを忘れないでください。現在はnullです。

+0

パーフェクト - ありがとう! :-) – Mathias

関連する問題