質問

ReadOnlyDictionaryが必要です。すべての投稿は、.NET 4.0には何もないと私に言った。そのため私は自分の実装を作成しました。

その後、そのResharper 5.1はSystem.Collections.ObjectsModel.ReadOnlyDictionaryへのあいまいな参照について私に言ったが、コードはエラーなしでコンパイルされています。

この実装を使用しようとしましたが、アクセスできない。なぜ?

.NET 4.0にReadOnlyDictionaryがあるかどうかをテストするための次のコードを書きました。

var foo = from assembly in AppDomain.CurrentDomain.GetAssemblies()
          where assembly.FullName.Contains("mscorlib")
          from type in assembly.GetTypes()
          where type.Name.StartsWith("ReadOnly")
          select type.FullName + " " + assembly.FullName;
.

と驚くべき結果は以下のとおりです。

System.Collections.ReadOnlyCollectionBase mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ObjectModel.ReadOnlyCollection`1 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ObjectModel.ReadOnlyDictionary`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ObjectModel.ReadOnlyDictionaryHelpers mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyArrayAttribute mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyDictionaryKeyCollection`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyDictionaryKeyEnumerator`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyDictionaryValueCollection`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyDictionaryValueEnumerator`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Security.ReadOnlyPermissionSet mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Security.ReadOnlyPermissionSetEnumerator mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ArrayList+ReadOnlyList mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ArrayList+ReadOnlyArrayList mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
.

.NET 4.0にはReadOnlyDictionaryがあります。私はこのタイプを反映してDotpeek 1.1を使って公開されています。

このタイプがアクセスできないのはなぜですか? Resharper 5.1(7.1にこの問題がない)のあいまいな参照を防ぐために私は何ができるでしょうか?

役に立ちましたか?

解決

ReadOnlyDictionary が導入されました.NET 4.5。今すぐ.NET 4.5は「上の上の」インストールで、MSCORLIBのバージョンで表示されている理由です。ただし、プロジェクトが.NET 4.0をターゲットにしている場合は、Visual Studioには何らかの参照アセンブリがいくつかあります。これは、どのタイプがどのタイプであるかを示します。

アプリをターゲット.NET 4.5にアップグレードできる場合は、その代わりに、最も簡単な修正になります。R#警告を修正するという点で - 古いバージョンでのみ起こるならば、あなたはそれを無視するだけでよいでしょう。これがオープンソースプロジェクトの場合は、どこかに文書化したい場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top