누군가 내가 아래의 컴파일 오류가 발생하는 이유를 설명해 주실 수 있습니까? BlockingCollection<T>
은 IReadOnlyCollectio<T>
인터페이스를 구현하며 다른 인터페이스에는 문제가 없습니다. 왜 명시 적 캐스트가 필요한데, List<T>
에 대해 동일한 작업을 수행해야하는 이유는 무엇입니까?BlockingCollection을 IReadOnlyCollection <T>에 <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을 사용하고있을 것 같습니까? –