سؤال

أحتاج ReadOnlyDictionary.أخبرتني جميع المشاركات أنه لا يوجد شيء في .Net 4.0.لهذا السبب قمت بإنشاء التنفيذ الخاص بي.

بعد القيام بذلك، أخبرني Resharper 5.1 عن إشارة غامضة إلى System.Collections.ObjectsModel.ReadOnlyDictionary ولكن يتم تجميع التعليمات البرمجية دون أخطاء.

لقد حاولت استخدام هذا التطبيق ولكن لا يمكن الوصول إليه.لماذا؟

لقد كتبت الكود التالي لاختبار ما إذا كان هناك ReadOnlyDictionary في نت 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

هناك ReadOnlyDictionary في نت 4.0.لقد استخدمت dotPeek 1.1 للتفكير في هذا النوع وهو عام.

لماذا لا يمكن الوصول إلى هذا النوع؟ما الذي يمكنني فعله لمنع المرجع الغامض في Resharper 5.1 (7.1 لا يعاني من هذه المشكلة)؟

هل كانت مفيدة؟

المحلول

ReadOnlyDictionary تم تقديمه في .NET 4.5.الآن يعد .NET 4.5 بمثابة تثبيت "فوق الأعلى"، ولهذا السبب تراه في إصدار mscorlib الخاص بك.ومع ذلك، إذا كان مشروعك يستهدف .NET 4.0، فمن المفترض أن Visual Studio لديه بعض التجميعات المرجعية في مكان ما والتي تخبره بالأنواع التي تم استخدامها حقًا في.نت 4.0.

إذا كان بإمكانك ترقية تطبيقك ليستهدف .NET 4.5 بدلاً من ذلك، فسيكون هذا هو الحل الأبسط.فيما يتعلق بإصلاح تحذير R# - قد ترغب في تجاهله فقط، إذا كان يحدث فقط في الإصدار القديم.إذا كان هذا مشروعًا مفتوح المصدر، فقد ترغب في توثيقه في مكان ما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top