2016-08-29 3 views
0

これは私の同僚のマシンで問題なく動作するコードの一部ですが、ソリューションをコンパイルしようとするとエラーが発生します。 'System .Collections.Generic.ICollection 'に' RemoveAll 'の定義がなく、' System.Collections.Generic.ICollection 'タイプの最初の引数を受け入れる拡張メソッド' RemoveAll 'が見つかりませんでした(usingディレクティブまたはアセンブリ参照?)C#System.Collections.Generic.Icollection <>にRemoveAllの定義が含まれていません

私は私たちの参照を照合し、それらは一致するようです。私はSystem.LinqとEntityFrameworkを参照しています。私はクリーニングと再コンパイルを試みましたが、このエラーは依然として続きます。

public void CleanClearinghouse() 
    { 
     this.ClearinghousePartners.RemoveAll(
      x => 
      string.IsNullOrWhiteSpace(x.ClearingHouseName) && 
      string.IsNullOrWhiteSpace(x.TradingPartnerName) && !x.StartDate.HasValue); 
    } 

アセンブリリファレンスなどが紛失しています。 解決策を探す場所についてのヒントはありますが、コードを変更するためのヒントはありません。

+1

RemoveAllがICollection に存在しません。これはリストのメソッドです。 –

+0

あなたの同僚のマシンで "Go to definition"を使用すると、それは何を見つけるのですか? – hvd

+0

@AnthonyPegramこれはまた、一部のアセンブリでは 'ICollection 'の拡張メソッドです。それ以上の情報がなければ、ここではどちらが当てはまるのかわからない。 – hvd

答えて

0

ICollection<T>にRemoveAllというメソッドが含まれていないのは事実です。 は、のRemoveAllはList<T>です。これはおそらく実際の具体的な変数のタイプです。

ただし、プロパティの型がICollectionの場合、コンパイラは実際にそれがリストであることを知る方法がありません。

言って、このような何か:List<string>ICollection<string>として公開されているため

public class MyClass 
{ 
    public ICollection<string> ClearinghousePartners {get;set;} 
    public MyClass() 
    { 
     ClearingHousePartners = new List<string>(); 
    } 
} 

は、コンパイルされません。

固定する方法の1つは、ICollectionの代わりにList<T>にプロパティ定義を変更することです。

+0

ClearinghousePartnersが(Icollectionとして)自動生成された方法と、コンストラクターでリストが不一致であると宣言されたという事実が問題でした。宣言と割り当てが一致したら、エラーは消えた。ありがとうございました – AidaM

関連する問題