Frage

ich brauche ein ReadOnlyDictionary.Alle Beiträge sagten mir, dass es in .Net 4.0 keine gibt.Aus diesem Grund habe ich meine eigene Implementierung erstellt.

Nachdem ich das getan hatte, erzählte mir Resharper 5.1 von einem mehrdeutigen Verweis auf System.Collections.ObjectsModel.ReadOnlyDictionary aber der Code lässt sich fehlerfrei kompilieren.

Ich habe versucht, diese Implementierung zu verwenden, aber sie ist nicht zugänglich.Warum?

Ich habe den folgenden Code geschrieben, um zu testen, ob es einen gibt ReadOnlyDictionary in .Net 4.0:

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;

Und das überraschende Ergebnis ist:

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

Da ist ein ReadOnlyDictionary in .Net 4.0.Ich habe dotPeek 1.1 verwendet, um für diesen Typ zu reflektieren, und er ist öffentlich.

Warum ist dieser Typ nicht zugänglich?Was kann ich tun, um die mehrdeutige Referenz in Resharper 5.1 zu verhindern (7.1 hat dieses Problem nicht)?

War es hilfreich?

Lösung

ReadOnlyDictionary wurde in .NET 4.5 eingeführt.Jetzt ist .NET 4.5 eine „übertriebene“ Installation, weshalb Sie sie in Ihrer Version von mscorlib sehen.Wenn Ihr Projekt jedoch auf .NET 4.0 abzielt, verfügt Visual Studio vermutlich irgendwo über eine Referenzassembly, die angibt, um welche Typen es sich handelt Wirklich in .NET 4.0.

Wenn Sie Ihre App stattdessen auf .NET 4.5 aktualisieren können, ist dies die einfachste Lösung.Was die Behebung der R#-Warnung betrifft, sollten Sie sie einfach ignorieren, wenn sie nur in einer alten Version auftritt.Wenn es sich um ein Open-Source-Projekt handelt, möchten Sie es vielleicht irgendwo dokumentieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top