誰かが以下のコンパイルエラーが発生する理由を説明していただけますか? BlockingCollection<T>
はIReadOnlyCollectio<T>
インターフェイスを実装しており、他のインターフェイスに問題はありません。なぜ明示的なキャストの必要性、なぜ私はList<T>
のために同じことをしなければならないのですか?なぜ私はBlockingCollection <T>をIReadOnlyCollection <T>に割り当てることができませんか?
'System.Collections.Concurrent.BlockingCollection<string>'
から'System.Collections.Generic.IReadOnlyCollection<string>'
に暗黙的に変換できません。以下は、明示的な変換(あなたはキャストが欠けている?)が存在
IReadOnlyCollection<string> roListItems = new List<string>(); // ok (baseline check)
IEnumerable<string> enumBCItems = new BlockingCollection<string>(); // ok
System.Collections.ICollection colBCItems = new BlockingCollection<string>(); // ok
IReadOnlyCollection<string> roBCItems = new BlockingCollection<string>(); // fail
IReadOnlyCollection<string> roExplicitBCItems = (IReadOnlyCollection<string>)new BlockingCollection<string>(); // ok....
編集
はReSharperのは、それゆえ私の混乱、私は宣言を見ていたとき、私を示したものです。
// Type: System.Collections.Concurrent.BlockingCollection`1
// Assembly: System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// MVID: BD5F7037-65C4-4C44-8FBC-F45D80D7550F
// Assembly location: C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.dll
public class BlockingCollection<T> : IEnumerable<T>, IEnumerable, ICollection, IDisposable, IReadOnlyCollection<T>
{ ... }
.NETでそのインタフェースを実装しておらず、それは他のバージョン 'セレクタを用いた微細 –
働いクラスがもともと 'IReadOnlyCollection'を実装したようには見えません。 .NET 4.0を使用しているかもしれないと思いますか? –