C # .NET 4.0 mscorlib содержит readonlydictionary?
-
21-12-2019 - |
Вопрос
Мне нужен генеракодицетагкод.Все сообщения сказали мне, что нет в .NET 4.0.По этой причине я создал свою собственную реализацию.
После того, как решарпер 5.1 рассказал мне о неоднозначной ссылке на ReadOnlyDictionary
, но код компилируется без ошибок.
Я пытался использовать эту реализацию, но это не доступно.Почему?
Я написал следующий код для проверки, есть ли генеракодицетагкод в .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;
.
и удивительный результат:
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.Я использовал DotPeek 1.1, чтобы отразить для этого типа, и это публично.
Почему этот тип недоступный? Что я могу сделать, чтобы предотвратить неоднозначную ссылку в Resharper 5.1 (7.1 нет этой проблемы)?
Решение
ReadOnlyDictionary
был введен в.Net 4.5.Теперь .NET 4.5 - это «Наверх», поэтому вы видите его в вашей версии MSCorlib.Однако, если ваш проект нацеливается на .NET 4.0, то предположительно Visual Studio имеет некоторую ссылочную ассамблею где-то, что говорит о том, какие типы были действительно в .NET 4.0.
Если вы можете обновить свое приложение к цели .NET 4.5 вместо этого, это будет самое простое исправление.С точки зрения фиксации предупреждения R # - вы можете просто проигнорировать его, если это произойдет только в старой версии.Если это проект с открытым исходным кодом, вы можете купить его где-то.