Domanda

Ho bisogno di un ReadOnlyDictionary.Tutti i post mi hanno detto che non c'è nessuno in .NET 4.0.Per questo motivo ho creato la mia stessa implementazione.

Dopo aver fatto quel resharper 5.1 mi ha detto di un riferimento ambiguo a System.Collections.ObjectsModel.ReadOnlyDictionary ma il codice è la compilazione senza errori.

Ho provato a utilizzare questa implementazione ma non è accessibile.Perché?

Ho scritto il seguente codice per verificare se c'è un 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;
.

e il risultato sorprendente è:

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
.

C'è un ReadOnlyDictionary in .NET 4.0.Ho usato Dotpeek 1.1 per riflettere per questo tipo ed è pubblico.

Perché questo tipo è inaccessibile? Cosa posso fare per prevenire il riferimento ambiguo in resharper 5.1 (7.1 non ha questo problema)?

È stato utile?

Soluzione

ReadOnlyDictionary è stato introdotto in.NET 4.5.Ora .NET 4.5 è un'installazione "sopra la parte superiore", motivo per cui lo stai vedendo nella tua versione di MSCorlib.Tuttavia, se il tuo progetto è rivolto a .NET 4.0, quindi presumibilmente Visual Studio ha un gruppo di riferimento da qualche parte che dice quali tipi erano veramente in .NET 4.0.

Se è possibile aggiornare la tua app per indirizzare .NET 4.5 Invece, sarà la correzione più semplice.In termini di fissaggio del R # Avvertimento - potresti voler solo ignorarlo, se succede solo in una vecchia versione.Se questo è un progetto open source, potresti volerlo documentare da qualche parte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top