Pregunta

Necesito un ReadOnlyDictionary.Todos los mensajes me dijo que no hay ninguno en .Net 4.0.Por esa razón he creado mi propia implementación.

Después de hacer que Resharper 5.1 me habló de una ambigua referencia a System.Collections.ObjectsModel.ReadOnlyDictionary pero el código es compilar sin errores.

He intentado utilizar esta aplicación, pero no es accesible.Por qué?

Yo escribí el siguiente Código para probar si existe un ReadOnlyDictionary en .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;

Y el resultado es un 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

Hay un ReadOnlyDictionary en .Net 4.0.He utilizado dotPeek 1.1 para reflexionar de este tipo y es pública.

¿Por qué es este tipo inaccesible?¿Qué puedo hacer para evitar la ambigüedad de la referencia en Resharper 5.1 (7.1 no tiene este problema)?

¿Fue útil?

Solución

ReadOnlyDictionary se introdujo en.NET 4.5.Ahora .NET 4.5 es una instalación "en la parte superior", por lo que lo está viendo en su versión de MSCORLIB.Sin embargo, si su proyecto está dirigido a .NET 4.0, entonces, presumiblemente, Visual Studio tiene algún ensamblaje de referencia en algún lugar que le indique qué tipos fueron realmente en .NET 4.0.

Si puede actualizar su aplicación para destinar .NET 4.5 en su lugar, eso será la solución más simple.En términos de arreglar la advertencia de R #, es posible que desee ignorarlo, si solo sucede en una versión anterior.Si este es un proyecto de código abierto, es posible que desee documentarlo en alguna parte.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top