C#.NET 4.0 MSCORLIBにはReadOnlyDictionaryが含まれていますか?
-
21-12-2019 - |
質問
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#警告を修正するという点で - 古いバージョンでのみ起こるならば、あなたはそれを無視するだけでよいでしょう。これがオープンソースプロジェクトの場合は、どこかに文書化したい場合があります。