C# .Net 4.0 mscorlib contém ReadOnlyDictionary?
-
21-12-2019 - |
Pergunta
eu preciso de ReadOnlyDictionary
.Todas as postagens me disseram que não há nenhum no .Net 4.0.Por esse motivo criei minha própria implementação.
Depois de fazer isso, o Resharper 5.1 me contou sobre uma referência ambígua a System.Collections.ObjectsModel.ReadOnlyDictionary
mas o código está compilando sem erros.
Tentei usar esta implementação, mas não está acessível.Por que?
Eu escrevi o código a seguir para testar se existe um ReadOnlyDictionary
em .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 o resultado surpreendente é:
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
Existe um ReadOnlyDictionary
em .Net 4.0.Usei o dotPeek 1.1 para refletir esse tipo e é público.
Por que esse tipo é inacessível?O que posso fazer para evitar a referência ambígua no Resharper 5.1 (7.1 não tem esse problema)?
Solução
ReadOnlyDictionary
foi introduzido no .NET 4.5.Agora, o .NET 4.5 é uma instalação "over the top", e é por isso que você o vê em sua versão do mscorlib.No entanto, se o seu projeto for direcionado ao .NET 4.0, presumivelmente o Visual Studio terá algum assembly de referência em algum lugar que informa quais tipos foram realmente no .NET 4.0.
Se você puder atualizar seu aplicativo para o .NET 4.5, essa será a solução mais simples.Em termos de correção do aviso do R# - você pode simplesmente ignorá-lo, se isso acontecer apenas em uma versão antiga.Se este for um projeto de código aberto, você pode querer documentá-lo em algum lugar.